0

C で関数を記述して、16 進値をバイナリ表現に変換し、各ビットを個別に配列に格納しようとしています。

だから現在、私はこの長い曲がりくねった方法を使用しています..

void HexToBinary(int *bits, unsigned int hex)
{
  bits[31] = (hex & 0x90000000) >> 31;
  bits[30] = (hex & 0x50000000) >> 30;
  bits[29] = (hex & 0x30000000) >> 29;
  bits[28] = (hex & 0x10000000) >> 28;
  bits[27] = (hex & 0x09000000) >> 27;
  bits[26] = (hex & 0x05000000) >> 26;
  bits[25] = (hex & 0x03000000) >> 25;
  bits[24] = (hex & 0x01000000) >> 24;
  bits[23] = (hex & 0x00900000) >> 23;
  bits[22] = (hex & 0x00500000) >> 22;
  bits[21] = (hex & 0x00300000) >> 21;
  bits[20] = (hex & 0x00100000) >> 20;
  bits[19] = (hex & 0x00090000) >> 19;
  bits[18] = (hex & 0x00050000) >> 18;
  bits[17] = (hex & 0x00030000) >> 17;
  bits[16] = (hex & 0x00010000) >> 16;
  bits[15] = (hex & 0x00009000) >> 15;
  bits[14] = (hex & 0x00005000) >> 14;
  bits[13] = (hex & 0x00003000) >> 13;
  bits[12] = (hex & 0x00001000) >> 12;
  bits[11] = (hex & 0x00000900) >> 11;
  bits[10] = (hex & 0x00000500) >> 10;
  bits[9] = (hex & 0x00000300) >> 9;
  bits[8] = (hex & 0x00000100) >> 8;
  bits[7] = (hex & 0x00000090) >> 7;
  bits[6] = (hex & 0x00000050) >> 6;
  bits[5] = (hex & 0x00000030) >> 5;
  bits[4] = (hex & 0x00000010) >> 4;
  bits[3] = (hex & 0x00000009) >> 3;
  bits[2] = (hex & 0x00000005) >> 2;
  bits[1] = (hex & 0x00000003) >> 1;
  bits[0] = (hex & 0x00000001);
}

これは 8 文字 (32 ビット) の 16 進数値を取り、& とビット シフトを使用して必要なビットを識別し、16 進数値の各ビットの配列に格納します。

明らかに、これは非常に長い方法であり、あまり良くありません。短くて簡単な方法を探しています。

プログラム内の各ビットに個別にアクセスする必要があるため、ビットはクワッドではなく配列に個別に格納する必要があります。

これについて最善の方法は何ですか?

ありがとう

4

2 に答える 2

2
for (int i=0;i<32;i++) {
  bits[i]=hex&1;
  hex>>=1;
}
于 2012-12-22T19:10:29.887 に答える
0

ループを使用するだけです。

void HexToBinary(int *bits, unsigned int hex) {
    for (int i = 0; i < 32; ++i) {
        bits[i] = (hex >> i) & 1;
    }
}

各ビットに個別にアクセスするために、すべてのビットを配列に配置する必要はありません。次の機能を使用してアクセスすることもできます。

int bit(unsigned int hex, int i) {
    return (hex >> i) & 1;
}

またはマクロを使用して:

#define BIT(hex, i) ((hex >> i) & 1)
于 2012-12-22T19:09:39.327 に答える