我想初始化一个16字节的十六进制数组,尤其是0x20(空格字符)值。
正确的方法是什么?
unsigned char a[16] = {0x20};
或
unsigned char a[16] = {"0x20"};
谢谢
[有一个名为designated initializers的GNU扩展名。默认情况下通过gcc
这样,您可以以以下形式初始化数组
unsigned char a[16] = {[0 ... 15] = 0x20};
例如定义此
unsigned char a[16] = {0x20, 0x41, 0x42, };
将如图所示初始化前三个元素,其余元素初始化为0
。
第二种方式
unsigned char a[16] = {"0x20"};
不会做您想做的:它只定义一个以四个字符0x20
为零的字符串,编译器不会将其视为十六进制值。
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";
第一种方法是正确的,但是您需要重复0x20,
16次。您也可以这样做:
unsigned char a[16] = " ";
我不知道这是否是您要寻找的,但是如果要更改给定数组的大小(是否经常更改),为了便于维护,您可以考虑基于[C0 ]
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