Leggere / scrivere su file binari in C

Qualcuno ha un esempio di codice che può scrivere su un file binario. E anche il codice che può leggere un file binario e l’output sullo schermo. Guardando gli esempi, posso scrivere su un file ok, ma quando provo a leggere da un file, non viene emesso correttamente.

Leggere e scrivere file binari è praticamente la stessa di qualsiasi altro file, l’unica differenza è come lo si apre:

 unsigned char buffer[10]; FILE *ptr; ptr = fopen("test.bin","rb"); // r for read, b for binary fread(buffer,sizeof(buffer),1,ptr); // read 10 bytes to our buffer 

Hai detto che puoi leggerlo, ma non sta uscendo correttamente … tieni presente che quando “emetti” questi dati, non stai leggendo ASCII, quindi non è come stampare una stringa sullo schermo:

 for(int i = 0; i<10; i++) printf("%u ", buffer[i]); // prints a series of bytes 

Scrivere su un file è praticamente lo stesso, con l'eccezione che stai usando fwrite() invece di fread() :

 FILE *write_ptr; write_ptr = fopen("test.bin","wb"); // w for write, b for binary fwrite(buffer,sizeof(buffer),1,write_ptr); // write 10 bytes from our buffer 

Dato che stiamo parlando di Linux .. c'è un modo semplice per fare un controllo di sanità mentale. Installa hexdump sul tuo sistema (se non è già lì) e scarica il file:

 [email protected]:~/C$ hexdump test.bin 0000000 457f 464c 0102 0001 0000 0000 0000 0000 0000010 0001 003e 0001 0000 0000 0000 0000 0000 ... 

Ora confrontalo con il tuo risultato:

 [email protected]:~/C$ ./a.out 127 69 76 70 2 1 1 0 0 0 

hmm, forse cambia il printf a %x per renderlo un po 'più chiaro:

 [email protected]:~/C$ ./a.out 7F 45 4C 46 2 1 1 0 0 0 

Ehi guarda! I dati corrispondono ora * . Fantastico, dobbiamo leggere correttamente il file binario!

* Nota i byte sono appena scambiati sull'output ma quei dati sono corretti, puoi aggiustare per questo genere di cose