Je voudrais initialiser un tableau de 16 octets de valeurs hexadécimales, en particulier la valeur 0x20 (caractère d'espacement).
Quelle est la bonne façon?
unsigned char a[16] = {0x20};
ou
unsigned char a[16] = {"0x20"};
Merci
Il existe une extension GNU appelée initializer désignés . Ceci est activé par défaut avec gcc
Avec cela, vous pouvez initialiser votre tableau sous la forme
unsigned char a[16] = {[0 ... 15] = 0x20};
Définir ceci, par exemple
unsigned char a[16] = {0x20, 0x41, 0x42, };
initialisera les trois premiers éléments comme indiqué, et les éléments restants sur 0
.
Votre deuxième façon
unsigned char a[16] = {"0x20"};
ne fera pas ce que vous voulez: il définit simplement une chaîne à zéro caractères avec les quatre caractères 0x20
, le compilateur ne le traitera pas comme une valeur hexadécimale.
La première méthode est correcte, mais vous devez répéter le 0x20,
seize fois. Vous pouvez aussi faire ceci:
unsigned char a[16] = " ";
unsigned char a[16] = {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
ou
unsigned char a[16] = "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20";
Je ne sais pas si c'est ce que vous recherchiez, mais si la taille du tableau donné doit être modifiée (fréquemment ou non), vous pouvez envisager la méthode suivante basée surmemset ()
#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));
....
}