PDA

Visualizza la versione completa : [C/C++]: Trasformare un file in codice (testuale) esadecimale


mamo139
22-09-2006, 20:36
vorrei costruire un programma che preso un file ne genera un altro con dentro il file di prima trasformato in codice esadecimale ( ovvero qualcosa di simile 1F2E12EA... ) e poi l'operazione inversa... come fare???

grazie mille... :ciauz:

[EDIT]il linguaggio il c++, l'avevo impostato ma nn so perche nn venuto... scusate

oregon
22-09-2006, 21:10
Lo trasforma in esadecimale ... vuoi dire in testo esadecimale?

Se il tuo file e' fatto da tre caratteri, ad esempio

ABC

il file risultante deve essere un file di testo fatto cosi'

414243

?

mamo139
22-09-2006, 21:30
si esatto... :D

oregon
22-09-2006, 21:49
Qualcosa del genere



FILE *fp, *fw;
char c;

if((fp = fopen("C:\\test.bin","rb")) == NULL) return 0;
if((fw = fopen("C:\\out.txt","wb")) == NULL) return 0;

while((c = fgetc(fp))!=EOF)
fprintf(fw, "%02X", (unsigned char)c);

fclose(fw);
fclose(fp);

mamo139
23-09-2006, 15:02
perfetto... funziona alla perfezione... :D
e se ora volessi fare l'operazione opposta??? :zizi:

grazie ciao

oregon
23-09-2006, 15:04
Perche' non provi a scrivere del codice e a mostrarlo (anche se errato) ?

mamo139
23-09-2006, 15:41
beh... proviamo...;)

FILE *fp, *fw;
char c;

if((fw = fopen("C:\\out.txt","rb")) == NULL) return 0;
if((fp = fopen("C:\\test2.bin","wb")) == NULL) return 0;

e fin qui ci siamo :zizi:

mmhhh... :master: l'idea sarebbe quella di ritrasformare da esadecimale... quindi al posto di "%02X" ci devo mettere qualcos'altro???
il problema che con quel while prendo un carattere alla volta ma a me servirebbero a gruppi di due visto che il testo esadecimale che ho ha due caratteri per ogni carattere dell'altro.... :confused:

oregon
23-09-2006, 15:46
Originariamente inviato da mamo139
il problema che con quel while prendo un carattere alla volta ma a me servirebbero a gruppi di due visto che il testo esadecimale che ho ha due caratteri per ogni carattere dell'altro.... :confused:

Giusto ...

mamo139
23-09-2006, 16:13
// lettura file
FILE * pFile;
long lSize;
char * buffer;
pFile = fopen ( "C:\\test.bin" , "rb" );
if (pFile==NULL) exit (1);
// obtain file size.
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
rewind (pFile);
// allocate memory to contain the whole file.
buffer = (char*) malloc (lSize);
if (buffer == NULL) exit (2);
// copy the file into the buffer.
fread (buffer,1,lSize,pFile);
// terminate
fclose (pFile);
//letto c:\lboot e messo in buffer

int y =0;
for(int x = 0; x < lSize ; x=x+2){
y=x+1;

e qui mi ritrovo con buffer[x] e buffer[y] che sono le due cifre del codice esadecimale di ogni carattere.... ma ora brancolo prorpio nel buio :bh:

}

oregon
23-09-2006, 16:47
E perche' mai lo devi caricare tutto in memoria? Basta scrivere



// Open del file da leggere

int v;
unsigned char c;
while(fscanf(pFile, "%02X", &v) == 1)
{
c = (unsigned char)v;
printf("%c", c);
}

// Close del file

Loading