ver em hex função

1. ver em hex função

Josafá
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}';
}



  


2. Re: ver em hex função

André
andrezc

(usa Debian)

Enviado em 13/10/2011 - 13:46h

[/i][/i][/b][/b]O Viva o Linux formatou o código. Poste o endereço da página do código.

Mas, de modo geral:


/* pega o resto da divisão do valor da variável 'b' por 16,e atribui à 'r' */
r = b % 16;

/* atribui à 'i' o valor de 'b' menos o valor de 'r', dividido por 16 */
i = (b - r)/16;

/* atribui o valor de 'vet' à primeira posição do vetor 'hex'.
hex[0] = vet;

/* atribui à segunda posição do vetor 'hex', o valor do índice 'r', do vetor 'vet'.
hex[1] = vet[r];

/* não há como dizer, pois o VoL formatou o trecho. */
hex[2] = '{TTEXTO}';






3. Re: ver em hex função

Josafá
zafar

(usa Ubuntu)

Enviado em 13/10/2011 - 14:43h

Aqui está o link:
http://www.vivaolinux.com.br/script/Visualizador-hexadecimal


Continuo sem entender. Tem como imprimir o valor de b? Por que dividir por 16?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts