通过使用std :: hex和std :: dec,可以从字符串中解析十六进制并将其转换为C ++中的十进制数。但如果十六进制数字被签名怎么办?
以下代码例如将得到241,如果输入“F1”是无符号十六进制,则该结果是正确的,但如果输入是带符号的十六进制,则结果应为-15。是否有可以处理带符号十六进制值的C ++函数?
int n;
stringstream("F1") >> std::hex >> n;
std::cout << std::dec << "Parsing \"F1\" as hex gives " << n << '\n';
答案 0 :(得分:1)
当您说“已签名的十六进制”时,表示如果您要用十六进制表示char
的按位表示,则F1
将为-15
。但是,签名十六进制中的-15
只是-F
。
如果您希望从此按位表示中获取-15
,则必须执行以下操作:
std::string szTest = "F1";
unsigned char chTest = std::stoi( szTest, nullptr, 16 );
char chTest2 = *reinterpret_cast<char*>(&chTest);
std::cout << szTest << ": " << static_cast<int>(chTest2) << std::endl;
return 0;