web-dev-qa-db-ja.com

C 16進数値で配列を初期化する

16バイト値の16バイト配列、特に0x20(スペース文字)値を初期化したいと思います。

正しい方法は何ですか?

unsigned char a[16] = {0x20};

または

unsigned char a[16] = {"0x20"};

ありがとう

6
Kingamere

GNUと呼ばれる拡張 指定された初期化子 があります。これはgccでデフォルトで有効になっています

これにより、配列を次の形式で初期化できます

unsigned char a[16] = {[0 ... 15] = 0x20};

これを定義する、例えば

unsigned char a[16] = {0x20, 0x41, 0x42, };

最初の3つの要素を図のように初期化し、残りの要素を0に初期化します。

あなたの第二の方法

unsigned char a[16] = {"0x20"};

4つの文字0x20でヌル終了文字列を定義するだけで、コンパイラはそれを16進値として扱いません。

5
Weather Vane

最初の方法は正しいですが、0x20,を16回繰り返す必要があります。これを行うこともできます:

unsigned char a[16] = "                ";
3
user3386109
unsigned char a[16] = {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};

または

unsigned char a[16] = "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20";
3
kcraigie

これがあなたが探していたものかどうかはわかりませんが、特定の配列のサイズが(頻繁に、または頻繁に)変更される場合は、メンテナンスを容易にするために、memset()

#include <string.h>

#define NUM_OF_CHARS 16

int main()
{
    unsigned char a[NUM_OF_CHARS];

    // initialization of the array a with 0x20 for any value of NUM_OF_CHARS
    memset(a, 0x20, sizeof(a));

    ....
}
2
Alex Lop.

memsetを使用します。

何も入力する必要はなく、配列のサイズは初期化時に一度だけ提供されます。

#include <string.h>

int main(void)
{
  unsigned char b[16];
  memset(b, 0x20, sizeof(b));
}
0
M3RS