¿Por qué se imprime 0 (cero) sin los principales "0x" con formato C printf "% # x"?
Background: Tengo una serie de scripts que analizan los archivos de registro en busca de números hexadecimales al encontrar el "0x" principal. Nuestra biblioteca C incrustada cambió a una nueva printf. El nuevo printf es más compatible con los estándares que nuestro anterior y mis scripts se rompieron.
En una caja de Linux:
#include <stdio.h>
int main( void )
{
printf( "%#010x\n", 0 );
printf( "%#010x\n", 1 );
return 0;
}
Output (usando glibc) es:
0000000000
0x00000001
La salida de nuestro firmware fue:
0x00000000
0x00000001
Desde printf (3), en el carácter de marca '#': "Para las conversiones xy X, un resultado distinto de cero tiene la cadena" 0x "(o" 0X "para las conversiones X) antepuestas a ella".
Soy curiosopor qu. Sin profundizar en los documentos de estándares C o comprar almuerzo para los miembros del comité de estándares, ¿por qué no un 0x principal en un argumento de valor cero?