我在处理位掩码或者说可能是处理了位溢出方面遇到了麻烦。
我从数据流中获取数据,它被存储在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位大小?
我还将buffer[index]
屏蔽为0x000000FF,但我仍然得到0xFFFFFFB8。为什么?
我只想得到0xB8,有人能告诉我怎么做吗?我非常确定它是1字节大小的。
unsigned char
而不是裸的char
。 - user824425uint8_t
。char
不能保证有8位(如果它确实有8位,那么uint8_t
是由标准保证的)。 - too honest for this siteuin8_t
,并使用printf("0x%"PRIx8"\n",buffer[index])
来打印它(包括<inttypes.h>以使用它)。请参阅C99草案n1256:7.8.1。 - 12431234123412341234123