Visualizador hexadecimal

Publicado por Geraldo José Ferreira Chagas Júnior 08/09/2008

[ Hits: 8.851 ]

Homepage: http://prginfo.blogspot.com

Download viewhex.c




Visualiza o conteúdo de um arquivo em escala hexadecimal.

  



Esconder código-fonte

/* 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] = '{FONTE}';
}

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] = '{FONTE}';    
}

Scripts recomendados

Processo em background

Conversor de Euros em Reais

Transforma a quantidade de dias digitados em anos, meses e dias

Seu quarto programa em C

aritmed1.c - Aritmetica de Ponteiros


  

Comentários
[1] Comentário enviado por zafar em 13/10/2011 - 09:45h

Fui compilar no Dev-cpp apareceu o seguinte erro no código:

57 `close' undeclared (first use this function)


Como faço para corrigir

[2] Comentário enviado por lacabeza em 11/04/2012 - 23:59h

ainda não testei mas posso adiantar que no lugar de "close()", é "fclose()"

[3] Comentário enviado por ecordeiro em 06/03/2013 - 07:51h

Bom dia amigo.

Me deparei com um problema no meu trabalho (Gráfica) onde estou tendo que manipular um arquivo de spool de impressão IBM.
Um arquivo no formato AFP.

Para manipular este arquivo tenho que trabalhar em hexadecimal.
Uso o ExEdit para visualizar seu conteúdo, mas para fazer os tratamento necessários tenho que desenvolver aplicações para manipular o mesmo.

E aqui no vl encontrei seu scipt em C, e funcionou bem, porém não leu o arquivo completamento.
Gostaria de saber se você poderia me ajudar quanto a manipulação do arquivo.
Teria como você me detalhar o funcionamento de seu código em todos os passos das linhas.

Caso seja possível ficari muito grato, obrigado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts