我正在从微控制器设备中读取char
类型的缓冲区,代码如下:
char data_buffer[DATA_LEN];
FILE *aq_dev = fopen(argv[1], "r");
fread(data_buffer, 1, DATA_LEN, aq_dev);
fclose(aq_dev);
在这个缓冲区blob中,有无符号的16位整数数字,每个数字分布在缓冲区的两个条目中。例如:
data_buffer[10] = 0x07
data_buffer[11] = 0xc3
我想将其读作0x07c3
,等于1987。尽管我最初认为我可以使用uint16_t
指针直接访问缓冲区并读取值,但我必须进行一些奇怪的位掩码操作:
int value = (buffer[10] << 8) + buffer[11];
在似乎毫无用处的位掩码下,会出现超过35000的错误值
int value = ((buffer[10] & 0xff) << 8) + (buffer[11] & 0xff);
返回正确的值。
char数组的条目如何比一个字节更大?
根据我的limits.h
(Linux,x86_64),有#define CHAR_BIT 8
。
请问有人能告诉我代码有什么问题吗?提前致谢!
char
是有符号的还是无符号的? - James McNellis