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

问题描述 投票:6回答:6

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

正确的方法是什么?

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

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

谢谢

c arrays string hex unsigned
6个回答
6
投票

[有一个名为designated initializers的GNU扩展名。默认情况下通过gcc

启用

这样,您可以以以下形式初始化数组

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

5
投票

例如定义此

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

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

第二种方式

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

不会做您想做的:它只定义一个以四个字符0x20为零的字符串,编译器不会将其视为十六进制值。


3
投票
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";

3
投票

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

unsigned char a[16] = "                ";

2
投票

我不知道这是否是您要寻找的,但是如果要更改给定数组的大小(是否经常更改),为了便于维护,您可以考虑基于[C0 ]

memset()

0
投票

我会使用#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
© www.soinside.com 2019 - 2024. All rights reserved.