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

时间:2015-10-31 18:17:17

标签: c arrays string hex unsigned

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

正确的方法是什么?

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

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

由于

6 个答案:

答案 0 :(得分:4)

有一个名为designated initializers的GNU扩展。 默认情况下,OnClickListener

启用此功能

有了这个,你可以用

形式初始化你的数组
gcc

答案 1 :(得分:3)

定义此项,例如

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

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

你的第二种方式

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

将不会执行您想要的操作:它只定义一个带有四个字符0x20的以空字符结尾的字符串,编译器不会将其视为十六进制值。

答案 2 :(得分:3)

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

unsigned char a[16] = "                ";

答案 3 :(得分:2)

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";

答案 4 :(得分:1)

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

    ....
}

答案 5 :(得分:0)

我会使用memset

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

#include <string.h>

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