我正在制作一个通过放置偏移量(十六进制)来转储文件的项目。我必须将十六进制与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);
...
}
答案 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;