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::istringstream
从 std::string
;
读取数据
std::string x("ABC");
std::istringstream sx(x);
unsigned v;
sx >> std::hex >> v;
if (v == 0xABC) std::cout << "Equal\n";
我正在制作一个通过放置偏移量(十六进制)转储文件的项目。我必须像 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::istringstream
从 std::string
;
std::string x("ABC");
std::istringstream sx(x);
unsigned v;
sx >> std::hex >> v;
if (v == 0xABC) std::cout << "Equal\n";