gpt4 book ai didi

c++ - 使用 C++ 将四个字节转换为整数

转载 作者:可可西里 更新时间:2023-11-01 16:26:16 26 4
gpt4 key购买 nike

我正在尝试使用 C++ 将 4 个字节转换为整数。

这是我的代码:

int buffToInteger(char * buffer)
{
int a = (int)(buffer[0] << 24 | buffer[1] << 16 | buffer[2] << 8 | buffer[3]);
return a;
}

上面的代码几乎适用于所有情况,例如:当我的缓冲区是:[\x00,\x00,\x40,\x00]" 代码将按预期返回 16384

但是当缓冲区充满:"[\x00,\x00,\x3e,\xe3]" 时,代码将无法按预期运行,将返回 "ffffffe1 ".

有人知道为什么会这样吗?

最佳答案

你的 buffer包含signed 字符。所以,实际上,buffer[0] == -29 , 转换为 int得到符号扩展到 0xffffffe3 ,然后又是(0x3e << 8) | 0xffffffe3 == 0xffffffe3 .

您需要确保您的个人 buffer字节被解释为 unsigned , 通过声明 buffer作为unsigned char * ,或者通过显式转换:

int a = int((unsigned char)(buffer[0]) << 24 |
(unsigned char)(buffer[1]) << 16 |
(unsigned char)(buffer[2]) << 8 |
(unsigned char)(buffer[3]));

关于c++ - 使用 C++ 将四个字节转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34943835/

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