Spécificateur de Format hex char en C
Est-il un spécificateur de format pour sprintf
en C qui mappe un char
à l'hex de la même manière que %x
cartes un int
hex?
qu'entendez-vous la carte d'un char à l'hex? sprintf formats de chaînes avec des valeurs entières, un char est juste une partie intégrante de la valeur, de sorte que si vous voulez dire que l'hex de la valeur décimale derrière un char, puis utilisez simplement
Je suppose que j'ai juste envie de l'affichage 1 octet de l'hexagone au lieu de 4 octets.
%x
Je suppose que j'ai juste envie de l'affichage 1 octet de l'hexagone au lieu de 4 octets.
OriginalL'auteur Daniel | 2012-10-03
Vous devez vous connecter pour publier un commentaire.
Oui et non.
Depuis
sprintf
prend une liste d'arguments variable, tous les arguments subir par défaut de la promotion avant desprintf
les reçoit. Cela signifie quesprintf
sera jamais recevoir unchar
-- unchar
sera toujours promuint
avantsprintf
reçoit (et unshort
sera ainsi).Oui, depuis ce
sprintf
reçoit sera unint
, vous pouvez utiliser%x
pour le convertir au format hexadécimal, et ça marchera même si cette valeur a commencé comme unchar
,short
, ouint
. Si (comme c'est souvent le cas) que vous souhaitez imprimer 2 caractères pour chaque entrée, vous pouvez utiliser%2.2x
.Attention à un point: si votre
char
est signé, et vous commencez avec une valeur négative, la promotion deint
va produire la même valeur numérique, qui, normalement, ne être le même modèle de bits que l'original char, donc (par exemple) un char avec la valeur-1
normalement imprimerffff
siint
est de 16 bits,ffffffff
si l'int de 32 bits, ouffffffffffffffff
siint
est de 64 bits (en supposant que le type de 2 complément représentation pour les entiers signés).OriginalL'auteur Jerry Coffin
C'est la même
%x
. Tous leschar
les valeurs sont converties enint
avant d'être transmis àsprintf
(ou toute autre fonction qui prend un nombre variable de paramètres).imprime
61
printf(%x\n", (char)0x90);
imprimeffffff90
, quand je veux imprimer90
Je veux aussi
printf(%x\n, (char)1)
pour imprimer01
au lieu de1
.utilisation
%02x
à force de zéro-padding deux-sortie de caractères.Casting
0x90
àunsigned char
au lieu dechar
va résoudre le signe problème d'extension.OriginalL'auteur dasblinkenlight