gpt4 book ai didi

c++ - 使用位移位缩短 2 个字符会导致具有大值的奇怪结果

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:04 25 4
gpt4 key购买 nike

我有一个包含服务器响应的 std::string。稍微分析一下字符串后,我发现了一个短路。 short 是 big-endian 并相应地存储在字符串中:

raw[0] == 0xa5;
raw[1] == 0x69;

我知道这是

file << raw[0] << std::endl << raw[1];

当被视为“0xa5 0x0a 0x69”的十六进制结果时。

我将它们写成这样的短片,然后按照 https://stackoverflow.com/a/300837/1318909 的启发写入文件:

short x = (raw[1] << 8) | raw[0];
file << std::to_string(x);

预期结果? 27045 (0x69a5)。

实际结果? -91 (0xffa5) <-- 溢出!

这是为什么?我进行了测试,它在值为 2402 的情况下工作正常。我还进行了一些额外的测试,它可以与

short x = (raw[1] << 8) | 0xa5;

但不是

short x = (0x69 << 8) | raw[0];

最佳答案

char 可能(也可能没有)被签名,看起来它在您的平台上。这意味着 0xa5 在您之前或在高字节中被符号扩展为 0xffa5。

在进行位操作之前尝试将每个字节转换为 unsigned char

关于c++ - 使用位移位缩短 2 个字符会导致具有大值的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24619604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com