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

时间:2016-10-20 09:57:09

标签: c++ hex hexdump

我正在制作一个通过放置偏移量(十六进制)来转储文件的项目。我必须将十六进制与0x一样放入0xBEE4DC,因为如果我放置一个没有像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);

...
}

3 个答案:

答案 0 :(得分: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 :(得分: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";

答案 2 :(得分:0)

以下代码以十六进制的形式保存数字而不加载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;