web-dev-qa-db-fra.com

C initialise le tableau en valeurs hexadécimales

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

4
Kingamere

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};
3

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.

3
Weather Vane

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] = "                ";
3
user3386109
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";
2
kcraigie

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

    ....
}
1
Alex Lop.