1

16 ビットの符号と大きさの整数を 8 ビットの符号と大きさの整数にコピーする C コードを実装しています。それは可能ですか?誰かがこれを行う方法を説明してもらえますか?

コードスニペット:

int16_t a = 0x1234;
int8_t b, c;

最初の 2 桁を変数 b にコピーし、次の 2 桁を変数 c にコピーする方法は?

4

1 に答える 1

3

言語のビット単位の演算子を使用できます。数字の 8 ビットと 0 ビットをそれぞれ右にシフトして、1 桁目と 2 桁目を取得する必要があります (正確に 1 バイトが抽出されるように、それらを 255 でマスクする必要もあります)。

int16_t i = 0x1234;
uint16_t n = i; // because shifting the sign bit invokes UB
int8_t hi = ((i >> 8) & 0xff);
int8_t lo = ((i >> 0) & 0xff);
于 2013-06-12T05:05:35.520 に答える