gpt4 book ai didi

c - 如何将字节从 char 数组转移到 int

转载 作者:太空宇宙 更新时间:2023-11-04 06:53:56 26 4
gpt4 key购买 nike

我想用 C 中的 char 数组制作一个 int varibale。

字符数组如下所示:

buffer[0] = 0xcf
buffer[1] = 0x04
buffer[2] = 0x00
buffer[3] = 0x00

移动看起来像这样

x = (buffer[1] << 8 )| (buffer[0] << 0) ;

之后 x 看起来像这样:

x = 0xffff04cf

如果前两个字节不是 ff,现在一切都会好起来的。

如果我尝试这条线

x = (buffer[3] << 24 )| (buffer[2] << 16)| (buffer[1] << 8)| (buffer[0] << 0) ;

还是那样

x = 0xffff04cf

即使我尝试在移入 04cf 之前或之后移入零,它看起来仍然是一样的。

这是正确的想法还是我做错了什么?

最佳答案

问题是您声明了 buffer通过带符号的类型,可能是(带符号的)char。应用运算符时 << , 将进行积分促销, 其值为 0xcf在 8 位有符号类型中表示负值(即 -49 ),它将保持负值(但由更多位表示,即 0xffffffcf )。注意 -1表示为 0xFFFFFFFF反之亦然。

要克服这个问题,只需定义 buffer作为

unsigned char buffer[4]

如果不允许您更改 buffer 的数据类型, 你可以写...

unsigned x = ( (unsigned char)buffer[0] << 8 )| ((unsigned char)buffer[1] << 4) ;

关于c - 如何将字节从 char 数组转移到 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47460086/

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