[C con Clase] hexdump

Programante programante en gmail.com
Jue Sep 24 16:58:57 CEST 2009


Susana Sacie escribió:
> esta función tan conocida que pasa datos de binario a hexadecimal no
> logro entender como lo hace:
>
> const char *
> mrtd_hexdump(const void *data, unsigned int len)
> {
>     static char string[1024];
>     unsigned char *d = (unsigned char *) data;
>     unsigned int i, left;
>    
>
>     memset(string, 0, sizeof(string));//inicializa a 0.
>     left = sizeof(string); //left no se usa , no entiendo para que lo
> declara
Estas dos sentencias sobran.

>     for (i = 0; len--; i += 3){  //no entiendo el control de este
> bucle, ¿cuando acaba?
Cuando llega al final de la cadena data (hemos recorrido los len
caracteres).

>         if (i >= sizeof(string) -4)
>             break;
Claro que también finaliza si no queda espacio en string para los
caracteres.

>         _snprintf(string+i, 4, " %02x", *d++);  ¿ por que tiene d un
> *? la cadena de formato "%02x" no la entiendo
d es un puntero a char, por eso tiene el *, para desreferenciarlo.
Es equivalente a hacer:
_snprintf(string+i, 4, " %02x", *d);  //Escribimos el caracter
d++; //Apuntamos al siguiente caracter.

"%02x" convierte en hexadecimal usando como mínimo dos caracteres y
haciendo padding con el 0.
printf("%02x", 1) devuelve "01", mientras que printf("%x", 1) devolvería 1.





Más información sobre la lista de distribución Cconclase