gpt4 book ai didi

c++ - 使用签名数据按位解包

转载 作者:太空宇宙 更新时间:2023-11-04 00:54:22 25 4
gpt4 key购买 nike

我一直在尝试将一些字符打包和解包为一个整数。尽管有一些主题与此问题相关,但我的问题与已签名的类次有关。我没有得到解压带符号值的“技巧”,即:

char c1 = -119;
char c2 = 26;

// pack
int packed = (unsigned char)c1 | (c2 << 8);
// unpack
c1 = packed >> 0;
c2 = packed >> 8;

// printf(c1, c2) -> Unpacked data: -119 | 26

这按预期工作但是当我尝试打包更多数据时,即:

char c0 = -42;
char c1 = -119;
char c2 = 26;

// pack
int packed = (unsigned char)c0 | (unsigned char)(c1 << 8) | (c2 << 16);
// unpack
c0 = packed >> 0;
c1 = packed >> 8;
c2 = packed >> 16;

// printf -> Unpacked data: -42 | 0 | 26

c1 值丢失。我猜这与符号位移到高位有关。

我怎样才能取回 c1 值?

提前致谢。

最佳答案

您正在将 c1 转换为 unsigned char 之后 将其移出该类型的范围,因此转换的结果为零.你应该在转移之前做 Actor :

int packed = (unsigned char)c0 | ((unsigned char)c1 << 8) | (c2 << 16);

关于c++ - 使用签名数据按位解包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7755071/

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