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

Kin*_*ere 5 c arrays string hex unsigned

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

正确的方法是什么?

unsigned char a[16] = {0x20};
Run Code Online (Sandbox Code Playgroud)

要么

unsigned char a[16] = {"0x20"};
Run Code Online (Sandbox Code Playgroud)

谢谢

Wea*_*ane 7

定义这个,例如

unsigned char a[16] = {0x20, 0x41, 0x42, };
Run Code Online (Sandbox Code Playgroud)

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

你的第二种方式

unsigned char a[16] = {"0x20"};
Run Code Online (Sandbox Code Playgroud)

不会做你想做的事:它只是用四个字符定义了一个以空字符结尾的字符串0x20,编译器不会把它当作一个十六进制值。


Rag*_*ddy 6

有一个称为指定初始化程序的GNU扩展。默认情况下启用gcc

有了这个,你可以在表单中初始化你的数组

unsigned char a[16] = {[0 ... 15] = 0x20};
Run Code Online (Sandbox Code Playgroud)


kcr*_*gie 5

unsigned char a[16] = {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
Run Code Online (Sandbox Code Playgroud)

或者

unsigned char a[16] = "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20";
Run Code Online (Sandbox Code Playgroud)