char
次のようなマイクロコントローラ デバイスからタイプのバッファを読み取っています。
char data_buffer[DATA_LEN];
FILE *aq_dev = fopen(argv[1], "r");
fread(data_buffer, 1, DATA_LEN, aq_dev);
fclose(aq_dev);
このバッファ ブロブには、符号なしの 16 ビット整数があり、それぞれがバッファ内の 2 つのエントリに分散されています。たとえば、
data_buffer[10] = 0x07
data_buffer[11] = 0xc3
これは 1987 に等しいものとして読みたいと思います。最初はポインターを0x07c3
使用してバッファーにアクセスし、値を直接読み取ることができると思っていたにもかかわらず、uint16_t
奇妙なビットマスキングを行う必要があります。
int value = (buffer[10] << 8) + buffer[11];
35000 を超える間違った値を与えますが、一見役に立たないビットマスキングのような
int value = ((buffer[10] & 0xff) << 8) + (buffer[11] & 0xff);
正しい値を返します。
char
の配列のエントリが1 バイトよりも大きくなるにはどうすればよいですか?
私limits.h
(Linux、x86_64)によると、 #define CHAR_BIT 8
.
誰かが私のコードの何が問題なのか教えてもらえますか? 前もって感謝します!