0

通过使用 std::hex 和 std::dec,可以从字符串解析十六进制并将其转换为 C++ 中的十进制数。但是如果十六进制数是有符号的呢?

例如,如果输入“F1”是无符号十六进制,则以下代码将产生 241,这是正确的,但如果输入是有符号十六进制,则结果应为 -15。是否有可以处理带符号的十六进制值的 C++ 函数?

 int n;
 stringstream("F1") >> std::hex >> n;
 std::cout << std::dec << "Parsing \"F1\" as hex gives " << n << '\n';
4

1 回答 1

1

当您说“带符号的十六进制”时,您的意思是如果您要char以十六进制表示 a 的按位表示,那么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;
于 2013-06-02T09:26:17.287 回答