为什么C++字符串中的十六进制值不打印预期值

问题描述 投票:0回答:1

我看过其他关于字符串中的十六进制的帖子,但我对我面前的东西感到困惑。 我有这个代码片段:

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++ hex
1个回答
0
投票

抱歉提出 C/C++ 新手问题。

正如molbdnilo

所回答的

“\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]));
}
© www.soinside.com 2019 - 2024. All rights reserved.