1

たとえば、次のようにします。

int32_t x = 572662306;  /* 00100010001000100010001000100010 */

最上位2バイトを次のように格納したいint8_t:

00100010 (base 2) = 34 (base 10) 

または、次の 4 つの最上位バイトint16_t:

0010001000100010 (base 2) = 8738 (base 10) 

これどうやってするの?

4

1 に答える 1

0

これは、バイトを抽出するのに非常に興味のない数値です。すべてのバイトは0x22. とにかく、これを行う1つの方法を次に示します。

#include <stdio.h>
#include <stdint.h>

int main()
{
   int32_t num = 572662306;

   int8_t num2;
   int8_t num3;

   int16_t num4;
   int16_t num5;

   printf("num in hex: 0x%x\n", num);

   num2 = (num >> 24);
   num3 = (num >> 16);
   num4 = (num >> 16);
   num5 = num;

   printf("num2 in hex: 0x%x\n", num2);
   printf("num3 in hex: 0x%x\n", num3);
   printf("num4 in hex: 0x%x\n", num4);
   printf("num5 in hex: 0x%x\n", num5);
}

出力:

16 進数: 0x22222222
16 進数の num2: 0x22
16 進数の num3: 0x22
16 進数の num4: 0x2222
16 進数の num5: 0x2222

PS

負の数のビットシフトには注意が必要です。符号なしの数値に対してビット シフトを実行することをお勧めします。が負の場合num、右へのビット シフトの結果は実装定義です。C99 標準 (6.5.7/5) から:

の結果E1 >> E2E1右シフトされたE2ビット位置です。符号なしの型の場合E1、または符号付きの型E1で負でない値の場合、結果の値はE1 /2 E2の商の整数部分です。符号付きの型と負の値を持つ場合E1、結果の値は実装定義です。

于 2015-03-23T03:25:56.940 に答える