- Abrir el fichero en modo sólo lectura.
- Acceder al byte número 32 y leer 16 bytes.
- Mostrar, de forma continua, el contenido de esos bytes.
- Repetir el proceso con el resto de campos que queremos mostrar.
Código:
/* Satuxconv */El editor de Blogspot es un poco caprichoso y ha alineado a la izquierda todo el código, dejándolo sin tabuladores, y algún posible error, lo siento !
#include "stdio.h"#include "stdlib.h" #include "string.h" int i; /* contador */ int j; /* contador 2 */ int buffer; /* Buffer de datos */ FILE* fichero; /*Fichero a abrir */ void mostrar (int pos, int maximo) { for (i=1; i<=maximo; i++) { j = (pos + i); fseek(fichero, j, SEEK_SET); fread(&buffer, 1, 1, fichero); printf("%c", (char)buffer); } } main (int argc, char *argv[]) { int fecha[8]; /*Almacena la fecha*/ int regiona[3]; /*Region del juego*/ /*Comprobar parámetros y abrir fichero*/ printf("\nSatuxconv\n"); if (argc < 2) { printf("Uso: satuxconv imagen.bin"); printf("\nActualmente se soportan imagenes BIN\n\n"); exit(0); } fichero=fopen(argv[1], "rb"); printf("\nDatos de la imagen\n"); printf("------------------\n\n"); /*Obteniendo el titulo*/ printf("Título: "); mostrar(111,27); /*Obteniendo el desarrollador*/ printf("\nDesarrollador: "); mostrar(31, 16); /*Obteniendo el producto*/ printf("\nProducto: "); mostrar(47,7); /*Obteniendo la version*/ printf("\nVersión: "); mostrar(57,6); /*Obteniendo la fecha*/ printf("\nFecha: "); for (i=1; i<=8; i++) { j = (63 + i); fseek(fichero, j, SEEK_SET); fread(&fecha[i], 1, 1, fichero); } printf("%c%c/%c%c/%c%c%c%c\n", (char)fecha[7],(char)fecha[8], (char)fecha[5], (char)fecha[6], (char)fecha[1], (char)fecha[2], (char)fecha[3], (char)fecha[4]); /*Obteniendo regiones*/ for (i=1; i<=3; i++) { j= 79 + i; fseek(fichero, j, SEEK_SET); fread(®iona[i], 1, 1, fichero); } /*Mostrar regiones*/ printf("\nRegión(es) del juego:\n"); for (i=1; i<=3; i++) { printf(" %c", (char)regiona[i]); if ((char)regiona[i] == 'T') printf(" - (Asia - NTSC)\n"); if ((char)regiona[i] == 'E') printf(" - (Europa)\n"); if ((char)regiona[i] == 'U') printf(" - (América del Norte)\n"); if ((char)regiona[i] == 'J') printf(" - (Japón)\n"); if ((char)regiona[i] == 'B') printf(" - (Centro/SudAmérica NTSC)\n"); if ((char)regiona[i] == 'K') printf(" - (Corea)\n"); if ((char)regiona[i] == 'A') printf(" - (Asia Este PAL)\n"); if ((char)regiona[i] == 'L') printf(" - (Centro/SudAmérica PAL)\n"); } /*Cerrar fichero*/ fclose(fichero); }
Se ha creado una función llamada "mostrar" que se encarga de leer los bytes en cada uno de los pasos. Gracias a esto la cantidad de código se reduce considerablemente.
Compilamos el código fuente y ejecutamos:
./satuxconv Castlevania.bin
Satuxconv 0.05
Datos de la imagen
------------------
Título: DRACULA-X
Desarrollador: SEGA TP T-95
Producto: T-9527G
Versión: V1.400
Fecha: 27/04/1998
Región(es) del juego:
E - (Europa)
Funciona ! En la siguiente entrada pasaremos al modo escritura y cambiaremos la región del juego por la que nosotros queramos.
chupi!
ResponderEliminar