gpt4 book ai didi

c - 位掩码 (char)(0xFFFFFFB8 & 0xFF) 在 c 中不起作用

转载 作者:太空狗 更新时间:2023-10-29 16:05:54 26 4
gpt4 key购买 nike

我正在为位屏蔽或可能处理位溢出而苦苦挣扎。

我从数据流中获取数据,并将其存储在char 类型的缓冲区中,我需要访问缓冲区的特定索引。当我尝试这样做时,我得到了意想不到的结果。

类似下面的内容..

char buffer[BUFFER_SIZE];

/* ...recv from network stream performed... */

printf("buffer[index] = 0x%x\n", buffer[index]); /* => 0xFFFFFFB8 */

char dummyChar = buffer[index] & 0x000000FF;
printf("dummyChar = 0x%x\n", dummyChar); /* => 0xFFFFFFB8 */

缓冲区是char 类型。为什么我在打印 buffer[index] 时得到的是 32 位大小?

我还用 0x000000FF 屏蔽了 buffer[index],但我仍然得到 0xFFFFFFB8。为什么?

我只想得到0xB8,谁能告诉我怎么做?我很确定它是 1 字节大小..

最佳答案

有两个原因:第一个是当传递小于 int 的整数类型时,它会自动提升为 int(可能对值进行符号扩展)。第二个原因是因为 printf格式 "%x" 用于打印 unsigned int 值,而不是字节。

对于 unsigned 字节(unsigned char),您应该使用修饰符 hh,如 中一样%hhx”。那么printf将知道传递的值实际上是单个无符号字节而不是完整的 unsigned int

有关详细信息,请参阅上面的链接引用。

关于c - 位掩码 (char)(0xFFFFFFB8 & 0xFF) 在 c 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39719866/

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