我看过其他关于字符串中的十六进制的帖子,但我对我面前的东西感到困惑。 我有这个代码片段:
std::string st = "\xB5\x62";
printf("len is %d\n", st.length());
for (std::size_t i = 0; i < st.size(); ++i)
{
printf("as hex = %x\n", st[i]);
printf("as dec = %d\n", st[i]);
}
令我困惑的是xB5的处理方式。输出是:
len is 2
as hex = ffffffb5
as dec = -75
as hex = 62
as dec = 98
对于十六进制的 B5,我期望“B5”而不是“ffffffb5”,对于 12 月,我期望“181”而不是 -75。谁能告诉我这是怎么回事? 谢谢。
抱歉提出 C/C++ 新手问题。
所回答的“\xB5”比 181 处的有符号字符大。 将代码更改为这样可以解决问题(转换为无符号字符,然后将其转换为 int):
std::string st = "\xB5\x62";
printf("len is %d\n", st.length());
for (std::size_t i = 0; i < st.size(); ++i)
{
printf("as hex = %x\n", static_cast<int>(static_cast<unsigned char>((st[i]));
printf("as dec = %d\n", static_cast<int>(static_cast<unsigned char>((st[i]));
}