C 以十六进制值初始化数组

C initialize array in hexadecimal values

我想初始化一个 16 字节的十六进制值数组,尤其是 0x20(space 字符)值。

正确的方法是什么?

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

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

谢谢

定义这个,例如

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

将初始化前三个元素,如图所示,其余元素为 0

你的第二种方式

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

不会做你想做的事:它只是定义了一个包含四个字符 0x20 的以 nul 结尾的字符串,编译器不会将其视为十六进制值。

第一种方法是正确的,但需要重复0x20,十六次。您也可以这样做:

unsigned char a[16] = "                ";
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";

有一个名为 designated initializers 的 GNU 扩展。 默认情况下启用 gcc

有了这个,你可以用

的形式初始化你的数组
unsigned char a[16] = {[0 ... 15] = 0x20};

我不知道这是否是您要找的,但是如果要更改给定数组的大小(经常或不更改),为了便于维护,您可以考虑以下基于 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));

    ....
}

我会使用 memset

无需输入任何内容,数组大小仅在初始化时提供一次。

#include <string.h>

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