tipos sintaxis formato especificadores datos codigos cadenas c printf format-specifiers

formato - sintaxis de printf y scanf



Especificador de formato% 02x (4)

Tengo un programa simple:

#include <stdio.h> int main() { long i = 16843009; printf ("%02x /n" ,i); }

Estoy usando el especificador de formato %02x para obtener una salida de 2 caracteres. Sin embargo, la salida que estoy obteniendo es:

1010101

mientras estoy esperando que sea: 01010101 .


% x es un especificador de formato que formatea y genera el valor hexadecimal. Si está proporcionando valor int o largo, lo convertirá a valor hexadecimal.

% 02x significa que si su valor proporcionado es inferior a dos dígitos, se anulará 0.

Usted proporcionó el valor 16843009 y se ha convertido a 1010101, que es un valor hexadecimal.


En realidad estás obteniendo el valor correcto.

La forma en que su procesador x86 (compatible) almacena datos como este, está en el orden de Little Endian , lo que significa que el MSB es el último en su salida.

Entonces, dada su salida:

10101010

los últimos dos valores hexadecimales 10 son el byte más significativo ( 2 hex digits = 1 byte = 8 bits (para una aclaración (posiblemente innecesaria)).

Entonces, al invertir el orden de almacenamiento de memoria de los bytes, su valor es en realidad: 01010101 .

¡Espero que eso lo aclare!


Su cadena es más ancha que su ancho de formato de 2. Por lo tanto, no hay que rellenar.


%02x significa imprimir al menos 2 dígitos, prepárelo con 0 si hay menos. En su caso, tiene 7 dígitos, por lo que no obtiene 0 extra en el frente.

Además, %x es para int, pero tienes un largo. Intente %08lx en %08lx lugar.