Salve a tutti,
volevo un aiuto si un programma che sto scrivendo per la manipolazione dei byte all'interno di un file (binario). In pratica leggo un file, modifico dei byte e lo riscrivo...una sorta di criptazione.
Spiego il problema in cui mi sono imbattuto e poi posto il codice.
Come vedrete nel codice, leggo il file ma quando stampo il contenuto dei byte memorizzati nel buffer i dati in output, che devono essere in esadecimale, non sono del tutto corretti.
In pratica, il ciclo di stampa Buf[i] sembra cominci a stampare non dall'inizio del buffer ma più avanti...si perde i primi byte. Se invece mietto Buf[0] o Buf[1] li stampa.
Poi mi stampa tutti i byte del file con "FFFFFF" davanti al byte interessato:
Posto il codice con la pseranza che qualcuno possa aitarmi. Grazie.
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
int main (int argc, char *argv[])
{
FILE *pf;
char *Buf;
int i;
unsigned long fileLen;
if (argc!=2)
{
printf("Sintassi: nome_programma nome_file\n");
exit(1);
}
if ((pf=fopen(argv[1],"r+"))==NULL) {
printf("Impossibile aprire il file %s\n", argv[1]);
exit(1);
}
//Ricava lunghezza file
fseek(pf, 0, SEEK_END);
fileLen=ftell(pf);
fseek(pf, 0, SEEK_SET);
//Alloca memoria buffer
Buf=(char *)malloc(fileLen+1);
if (!Buf)
{
fprintf(stderr, "Memory error!");
fclose(pf);
exit(1);
}
//Lettura contenuto file nel buffer
while(!feof(pf)){
fread(Buf, fileLen, 1, pf);
}
fclose (pf);
for(i=0;i<=fileLen;i++)
printf("%.2x\n",(int)Buf[i]);
free(Buf);
}