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 .

22
demandé sur Mini Bhati 2013-08-26 11:35:26

4 réponses

%02x signifie imprimer au moins 2 chiffres, préprendre avec 0si 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.

37
répondu aragaer 2013-08-26 09:22:01

votre chaîne est plus large que votre largeur de format de 2. Donc il n'y a pas de rembourrage à faire.

2
répondu PP. 2013-08-26 07:37:17

%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.

1
répondu Pulkit Rajput 2017-11-03 06:13:24

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!

-1
répondu RJM 2016-02-19 19:54:36