【发布时间】:2016-09-27 08:33:58
【问题描述】:
我正在为位屏蔽或处理位溢出而苦苦挣扎。
我从数据流中获取数据,它存储在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 类型。为什么我在打印缓冲区[索引] 时得到 32 位大小?
我还用 0x000000FF 掩盖了 buffer[index],但我仍然得到 0xFFFFFFB8。为什么?
我只想得到 0xB8,谁能告诉我怎么做?我很确定它是 1 字节大小..
【问题讨论】:
-
使用
unsigned char而不是纯char。 -
谢谢。现在可以了! :)
-
更好的是,在进行这种编程时,在任何地方都使用 stdint.h 类型。
-
如果需要 8 位,请使用
uint8_t。char不保证有 8 位(如果有,uint8_t由标准保证) -
Olaf 已经写好了,你应该使用
uin8_t,并使用printf("0x%"PRIx8"\n",buffer[index])来打印它(包括来使用它)。参见 C99 草案 n1256:7.8.1
标签: c bit-manipulation