繁体   English   中英

在C ++中将十六进制签名为十进制

[英]Signed Hexadecimal to decimal in C++

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

当您说“带符号的十六进制”时,您的意思是如果要用十六进制表示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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM