我正在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
.
有人可以告诉我我的代码有什么问题吗?提前致谢!