hex — c ++ ввод шестнадцатеричный без 0x

Я делаю проект, который создает дамп файла, помещая смещения (шестнадцатеричные). Я должен поставить шестнадцатеричное с 0x, как 0xBEE4DC, потому что приложение потерпит крах или вернет ошибку, если я поставлю шестнадцатеричное без 0x, как BEE4DC. Есть ли способ поставить шестнадцатеричное без «0x»?

Это мой код Я держу этот проект в секрете, поэтому я не показываю больше кода, чем этот.

dump1.cpp

void LoadMetadata(char* szFile)
{
string mystr;
int offset2;
int offset1;
std::cout << "Input unknown offset #1: ";
getline(cin, mystr);
stringstream(mystr) >> offset1;
std::cout << "Input unknown offset #2: ";
getline(cin, mystr);
stringstream(mystr) >> offset2;
std::cout << "\n";

...

}

dump2.cpp

static int offset2;
static int offset1;

void LoadDumpLib(char* szFile)
{

...
pCodeRegistration = (DumpCodeRegistration*)MapVATR(offset2, pLibIl2Cpp);
pMetadataRegistration = (DumpMetadataRegistration*)MapVATR(offset1, pLibIl2Cpp);

...
}

1

Решение

Этот код должен работать

std::cout << "Input unknown offset #1: ";
getline(cin, mystr);
stringstream(mystr) >> hex >> offset1;
std::cout << "Input unknown offset #2: ";
getline(cin, mystr);
stringstream(mystr) >> hex >> offset2;
std::cout << "\n";
1

Другие решения

В коде буквальное значение нуждается в 0x Префикс должен интерпретироваться как шестнадцатеричный. Итак 0x не является обязательным в чем-то вроде.

  unsigned x = 0xABC;

При чтении значения, например, с использованием потоков, 0x не требуется (на самом деле, если вам нужен префикс, необходимо написать код для его обработки). Так, например, используя std::istringstream читать данные из std::string;

  std::string x("ABC");
std::istringstream sx(x);
unsigned v;

sx >>  std::hex >> v;

if (v == 0xABC) std::cout << "Equal\n";
1

Следующий код сохраняет число в шестнадцатеричном виде без 0x и загружает его.

string mystr;
int offset1;
std::cout << "Input unknown offset #1: ";
getline(cin, mystr);
stringstream ss( mystr);
ss << std::hex;
ss >> offset1;
std::cout << offset1 << std::endl;

std::string str2;
stringstream s2;
s2 << std::hex << 0x2123;
s2.flush();
s2 >> str2;
std::cout << str2 << std::endl;
0
По вопросам рекламы [email protected]