Spécificateur de Format %02x
j'ai un programme simple :
#include <stdio.h>
int main()
{
long i = 16843009;
printf ("%02x n" ,i);
}
j'utilise %02x
spécificateur de format pour obtenir la sortie 2 char,
Cependant, le résultat que j'obtiens est:
1010101
alors que je m'attends à ce qu'il soit :01010101
.
4 réponses
%02x
signifie imprimer au moins 2 chiffres, préprendre avec 0
si il y a de moins en moins. Dans votre cas, il est de 7 chiffres, donc vous n'obtenez pas de supplément 0
en face.
Également %x
est de type int, mais vous avez une longue. Essayez %08lx
à la place.
votre chaîne est plus large que votre largeur de format de 2. Donc il n'y a pas de rembourrage à faire.
%x est un spécificateur de format qui spécifie le format et la sortie de la valeur hex. Si vous fournissez int ou de la valeur longue, il le convertira en valeur hexadécimale.
%02x signifie que si votre valeur est inférieure à deux chiffres puis 0 sera précédée.
vous avez fourni la valeur 16843009 et elle a été convertie en 1010101 qui est une valeur hexadécimale.
vous obtenez en fait la valeur correcte.
La façon dont votre x86
(compatible) processeur stocke les données comme ceci, est dans Little Endian ordre, ce qui signifie que L'ESM est le dernier de votre sortie.
Donc, compte tenu de votre sortie:
10101010
les deux dernières valeurs en hexadécimal 10
sont les octets les plus significatifs (2 hex digits = 1 byte = 8 bits
(pour clarification (éventuellement inutile)).
Donc, par marche arrière l'ordre de mémoire des octets, votre valeur est en fait:01010101
.
j'Espère que efface!