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));
}
我想初始化一个 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));
}