C initialiser le tableau de valeurs hexadécimales
Je voudrais initialiser un tableau de 16 octets de valeurs hexadécimales, en particulier la 0x20 (caractère espace).
Quelle est la bonne façon?
unsigned char a[16] = {0x20};
ou
unsigned char a[16] = {"0x20"};
Grâce
0x2
n'est pas le caractère d'espace, mais un nombre entier.Je parle de l'espace ASCII du caractère en hexadécimal, ce qui est
0x20
Le C standard ne pas utiliser l'ASCII. (Nous venons de le souligner j'ai raté une fuite
0
; je voulais dire 0x20
, bien sûr). Si tu veux de l'espace, vous devez utiliser un caractère d'espace constant: ' '
.
OriginalL'auteur Kingamere | 2015-10-31
Vous devez vous connecter pour publier un commentaire.
Il est une extension GNU appelé désigné initialiseurs.
Cette option est activée par défaut avec
gcc
Avec cela, vous pouvez initialiser ton tableau dans le formulaire
OriginalL'auteur Raghu Srikanth Reddy
La définition de cette, par exemple
va initialiser les trois premiers éléments, comme indiqué, et le reste des éléments à
0
.Votre deuxième façon
de ne pas faire ce que vous voulez: il définit un nul de terminaison de chaîne avec les quatre personnages
0x20
, le compilateur ne pas la traiter comme une valeur hexadécimale.la valeur ASCII est 0x20 (hex) ou 32 (décimal). Si vous avez l'impression que comme un
int
vous aurez32
et si vous avez l'impression quechar
vous aurez ` ` (espace).Je vois, merci. Explication correspond à mon code de comportement
OriginalL'auteur Weather Vane
La première manière est la bonne, mais vous devez répéter la
0x20,
seize fois. Vous pouvez également le faire:"<16 spaces>"
sera effectivement occupent 17 octets (le dernier pour '\0').Négatif, le C spécification permet à un tableau de caractères à être initialisé à l'aide d'un littéral de chaîne qui est de la même taille que le tableau. Dans ce cas, le NUL de terminaison est supprimée.
Pourriez-vous svp m'indiquer les documents qui seront l'appui de votre déclaration?
Section 6.7.9 paragraphe 14, qui dit (italiques ajoutés): "Successifs octets de la chaîne littérale (y compris le caractère de fin null si il ya de la place ou si le tableau est de taille inconnue) initialiser les éléments du tableau."
+Upvote pour m'enseigner quelque chose de nouveau!
OriginalL'auteur user3386109
ou
OriginalL'auteur kcraigie
Je ne sais pas si c'est ce que vous cherchez, mais si la taille de la matrice va être changé (fréquemment ou pas), pour un entretien plus facile, vous pouvez envisager de la méthode suivante basée sur memset()
OriginalL'auteur Alex Lop.