zafar
(usa Ubuntu)
Enviado em 13/10/2011 - 12:52h
Peguei esse código aqui no viva o linux e gostaria que me explicassem como funciona a função bytetoHexa e intTohex. Principalmente essa parte
r = b % 16;
i = (b - r)/16;
hex[0] = vet[i];
hex[1] = vet[r];
hex[2] = '{TTEXTO}';
pega o resto da divisão de b e armazena em r depois subtrai r de b e divide por 16. Alguem pode me explicar isso?
/* viwhexa.c */
#include <stdio.h>
void byteToHexa (unsigned char b, char* hex);
void intTohex (unsigned long int b, char* hex);
int main (int argc, char* argv[])
{
FILE *arq;
char buf[3];
int contByteLin=0;
unsigned long int contLin=1;
char pos [9];
int f;
if (argc!=2)
{
printf ("Parametro incorreto.\n");
printf ("Informe apenas o nome do arquivo\n");
return 1;
}
if (!(arq=fopen(argv[1],"r")))
{
printf ("Nao foi possivel abrir o arquivo!\n");
return 1;
}
printf (" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");
printf (" -----------------------------------------------\n");
printf ("00000000 | ");
while (f=fread(buf,1,1,arq))
{
if (contByteLin==16)
{
contByteLin = 0;
printf ("\n");
if ((contLin % 0x10) == 0)
{
printf (" -----------------------------------------------\n");
printf (" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");
printf (" -----------------------------------------------\n");
}
intTohex (contLin++, pos);
printf ("%s | ",pos);
}
byteToHexa (buf[0],buf);
printf ("%s ",buf);
contByteLin ++;
}
printf ("\n");
close (arq);
}
void byteToHexa (unsigned char b, char* hex)
{
char vet[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int r;
int i;
r = b % 16;
i = (b - r)/16;
hex[0] = vet[i];
hex[1] = vet[r];
hex[2] = '{TTEXTO}';
}
void intTohex (unsigned long int b, char* hex)
{
char vet[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
unsigned long int r;
r = b % 0x10; hex[7] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[6] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[5] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[4] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[3] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[2] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[1] = vet[r]; b = b >> 0x4;
hex[0] = vet[b];
hex[8] = '{TTEXTO}';
}