papapep
2003-11-07 13:29:32 UTC
Tengo unos ficheros binarios en hexa y necesito acceder a los datos en
ellos almacenados. He adaptado un ejemplillo que encontré en un libro
para empezar a hacer pruebas, pero me sucede lo siguiente:
En el fichero original, visualizado con un editor hexadecimal, me
aparecen los siguientes registros (pongo sólo los 2 primeros como ejemplo):
1) 08 16 01 09 20 03 A6 00 00 00 00 00 00 00 00 00 00 00 CF C0
2) 08 16 01 09 20 03 00 10 00 00 00 00 41 41 00 5A 14 89 1C F0
Y en cambio, el resultado del código es el siguiente:
1) 08-16-01-09-20-03-FFA6-00-00-00-00-00-00-00-00-00-00-00-FFCF-FFC0
2) 08-16-01-09-20-03-00-10-00-00-00-00-41-41-00-5A-14-FF89-1C-FFF0
(LOS GUIONES LOS HE PUESTO YO PARA CLARIFICAR LA SEPARACION DE LOS BYTES).
Como podéis ver en el registro 1 en el byte 6, 19 y 20 y en el registro
2 en los bytes 18 y 20, aparecen FF's que no sé ni porqué salen ni como
evitarlo. En otros registros salen en otra posición, sin pauta ninguna.
Os paso el código por si veis alguna estupidez (cosa que no sería
rara... ;-))
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define SIZE 128
void display(int numread);
char buf[SIZE];
main(int argc, char *argv[])
{
FILE *fp;
int sector, numread;
if (argc!=2)
{
printf("descripció: 218 NomArxiu\n");
exit(1);
}
if ((fp=fopen(argv[1], "rb"))==NULL)
{
printf("no es pot obrir l'arxiu\n");
exit(1);
}
do
{
printf("Introdueix el sector (-1 per a sortir): ");
scanf("%ld", §or);
if (fseek(fp, sector*SIZE, SEEK_SET)) /* SEEK_SET és l'offset desde
l'inici del fitxer */
{
printf("Error de seek\n");
}
if ((numread=fread(buf, SIZE, 1, fp))!=SIZE)
{
printf("S'ha arribat a EOF\n");
}
display (numread);
}
while (sector>=0);
}
void display(int numread)
{
int i, j;
for(i=0; i<=numread/20; i++)
{
for(j=0;j<20; j++) printf ("%02X-", buf[i*20+j]);
printf("\n");
}
}
Gracias por vuestra atención.
Josep Sànchez
ellos almacenados. He adaptado un ejemplillo que encontré en un libro
para empezar a hacer pruebas, pero me sucede lo siguiente:
En el fichero original, visualizado con un editor hexadecimal, me
aparecen los siguientes registros (pongo sólo los 2 primeros como ejemplo):
1) 08 16 01 09 20 03 A6 00 00 00 00 00 00 00 00 00 00 00 CF C0
2) 08 16 01 09 20 03 00 10 00 00 00 00 41 41 00 5A 14 89 1C F0
Y en cambio, el resultado del código es el siguiente:
1) 08-16-01-09-20-03-FFA6-00-00-00-00-00-00-00-00-00-00-00-FFCF-FFC0
2) 08-16-01-09-20-03-00-10-00-00-00-00-41-41-00-5A-14-FF89-1C-FFF0
(LOS GUIONES LOS HE PUESTO YO PARA CLARIFICAR LA SEPARACION DE LOS BYTES).
Como podéis ver en el registro 1 en el byte 6, 19 y 20 y en el registro
2 en los bytes 18 y 20, aparecen FF's que no sé ni porqué salen ni como
evitarlo. En otros registros salen en otra posición, sin pauta ninguna.
Os paso el código por si veis alguna estupidez (cosa que no sería
rara... ;-))
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define SIZE 128
void display(int numread);
char buf[SIZE];
main(int argc, char *argv[])
{
FILE *fp;
int sector, numread;
if (argc!=2)
{
printf("descripció: 218 NomArxiu\n");
exit(1);
}
if ((fp=fopen(argv[1], "rb"))==NULL)
{
printf("no es pot obrir l'arxiu\n");
exit(1);
}
do
{
printf("Introdueix el sector (-1 per a sortir): ");
scanf("%ld", §or);
if (fseek(fp, sector*SIZE, SEEK_SET)) /* SEEK_SET és l'offset desde
l'inici del fitxer */
{
printf("Error de seek\n");
}
if ((numread=fread(buf, SIZE, 1, fp))!=SIZE)
{
printf("S'ha arribat a EOF\n");
}
display (numread);
}
while (sector>=0);
}
void display(int numread)
{
int i, j;
for(i=0; i<=numread/20; i++)
{
for(j=0;j<20; j++) printf ("%02X-", buf[i*20+j]);
printf("\n");
}
}
Gracias por vuestra atención.
Josep Sànchez