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.Lettura/scrittura su file binari in C
risposta
di lettura e scrittura di file binari è più o meno 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
Lei ha detto si può leggere, ma non è l'output correttamente ... tenere presente che quando si "uscita" questi dati, non stai leggendo ASCII, quindi non è come la stampa di una stringa sullo schermo:
for(int i = 0; i<10; i++)
printf("%u ", buffer[i]); // prints a series of bytes
scrittura su un file è praticamente la stessa, con l'eccezione che stai utilizzando fwrite()
anziché 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
Visto che stiamo parlando di Linux .. c'è un modo semplice per fare un controllo di integrità. Installare hexdump
sul vostro sistema (se non è già in là) e scaricare 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 si confronti con l'output:
[email protected]:~/C$ ./a.out
127 69 76 70 2 1 1 0 0 0
hmm, forse cambiare il printf
ad un %x
fare questo 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 vengono scambiati solo sull'uscita ma che dati sono corretti, è possibile regolare per questo genere di cose
so che è vecchio, ma ci sono alcune domande che devo fare: "// scrivere 10 byte nel nostro buffer" significa che salva ciò che è nel buffer del tuo file? – Gaunt
@Gaunt - Sì, avrei dovuto dire "da" per renderlo più chiaro; L'ho risolto ora. In questo esempio suppongo che esista un "buffer" e che sia compilato con alcuni dati e che venga scritto su "test.bin" come indicato da 'write_ptr'. Se lo esegui, puoi "hexdump" il file test.bin e vedere quei byte in esso contenuti. – Mike
Nota che su Linux (e generalmente su sistemi basati su Unix), il flag 'b' è 'opzionale' - non c'è distinzione tra un file binario e un file di testo su tali sistemi. La differenza conta molto su Windows, però. Se il tuo codice ha pretese di portabilità, aggiungi il 'b' quando hai intenzione di trattare il file come un file binario. –
- 1. Confronta file binari in C#
- 2. Scrittura di file binari in C++
- 3. Scrivi cv :: Mat su file binari?
- 4. C la lettura dei file binari
- 5. Caricamento immagine su binari
- 6. stream grandi file binari con urllib2 su file
- 7. È possibile eseguire file binari in java?
- 8. File binari ed iteratori C++: con 1: 1 utilizzando ifstreambuf_iterator?
- 9. StringIO con file binari?
- 10. Analisi del flusso di messaggi binari in C/C++
- 11. Come interpretare i dati binari in C++?
- 12. Java: come scrivere file binari?
- 13. Wix - SQL parentesi quadre in file binari
- 14. Aggiornamento file binari in TFS Source Control
- 15. Come concatenare due file binari in Erlang?
- 16. C# Alberi binari e dizionari
- 17. asset_url in mailer su binari 3.1
- 18. Stesso semplice codice sorgente, diversi file binari su Windows
- 19. Scansione virus dei binari - Blob contro file
- 20. Diff per 3 file binari
- 21. Lettura/Scrittura di file binari
- 22. grepping file binari e UTF16
- 23. Scarica file binari con Javascript
- 24. Come scrivere dati binari in un file usando node.js?
- 25. Come posso copiare diversi file binari in un file su un sistema Linux?
- 26. Utilizzo di dati binari nella stringa C++
- 27. Dati binari su terminale seriale
- 28. C# alternativa delle migrazioni dei binari
- 29. Prestazioni di lettura file binari .NET
- 30. Android download problemi di file binari
Potete mostrare il codice? – chrisaycock
Internet avrà un sacco di esempi. Come stai emettendo i dati? Forse è sbagliato. – doctorlove