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.