c ++输入没有0x的十六进制

c++ input hexadecimal without 0x

我正在制作一个通过放置偏移量(十六进制)转储文件的项目。我必须像 0xBEE4DC 那样把十六进制和 0x 放在一起,因为如果我像 BEE4DC 那样把十六进制不带 0x,应用程序会崩溃或 return 出错。有没有办法让十六进制不带“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);

...
}

以下代码以不带 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;

此代码应该有效

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";

在代码中,文字值需要 0x 前缀才能被解释为十六进制。所以 0x 在类似

中不是可选的
  unsigned x = 0xABC;

当读取一个值时,例如使用流,0x 不是必需的(事实上,如果你想要前缀,有必要编写代码来处理它)。因此,例如,使用 std::istringstreamstd::string;

读取数据
  std::string x("ABC");
  std::istringstream sx(x);
  unsigned v;

  sx >>  std::hex >> v;

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