ErrorDeSintaxis

Pequeños fragmentos de código fuente en distintos lenguajes de programación, agrupados por categorías.

Puedes buscar entre los fuentes existentes, o aportar los tuyos.

C: Mostrar un fichero en hexadecimal

Mostrar un fichero en hexadecimal y en ASCII, en dos columnas

Lenguaje: C (compilador: Turbo C)

Categoría: Ficheros

/* Fuente procedente de ErrorDeSintaxis.es */
/* Mostrar un fichero en hexadecimal y en ASCII, */
/*  en dos columnas */
/* Compilador: Turbo C */
/* Nivel: Básico */
/* Disponible desde 17/08/2011 */
/* Aportado por Nacho */
/* Autor original: Nacho Cabanes */
#include <stdio.h>
 
main()
{
  FILE *fichero;
  char nombre[20];
  char datos[16];
  int i, maximo, contador;
 
  printf("Fichero a analizar: ");
  gets(nombre);
 
  fichero=fopen(nombre, "rb");
  if (fichero == NULL) 
    puts("Fichero no encontrado!");
  else  {
    contador = 0;
    /* Mientras no se acabe el fichero */
    while (!feof(fichero))  {
      maximo = 16;  /* Supongo que hay 16 datos */
      /* Leo una linea */
      for (i = 0; i < maximo; i++) {
        datos[i]=fgetc(fichero);
        if (feof(fichero)) /* Si se acaba, apunto donde */
          maximo = i;        
      }
      /* Escribo Hex */
      for (i = 0; i < maximo; i++) {
        printf("%02X ", datos[i]);
      }
      /* Si es la ultima linea, relleno con espacios */
      if (maximo<16)
         for (i = maximo; i < 16; i++) 
           printf("   ");
      printf("| ");
      /* Escribo ASCII */
      for (i = 0; i < maximo; i++) {
        if ((datos[i] < 32) || (datos[i] > 127)) 
          printf(".");
        else
          printf("%c", datos[i]);
      }
      /* Avanzo para la siguiente linea */
      printf("
");
      /* Compruebo si se ha acabado la pagina */
      contador ++;
      if (contador == 20) {
        getchar();
        contador = 0;
      } 
    }
  }
  fclose(fichero);
}