在C ++中将十六进制符号转换为十进制

时间:2013-06-02 09:10:33

标签: c++ signed hex

通过使用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';

1 个答案:

答案 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;