PDA

Visualizza la versione completa : [C++] modalità di stream binario su file


Kilin
06-03-2008, 18:10
ciao a tutti... come da titolo:

non mi è chiaro come funziona la modalità di stream "binary" ad esempio su file (sia in scrittura che in lettura)..

Potete spiegarmi in cosa consiste?

vi ringrazio

MItaly
06-03-2008, 18:33
Con la modalità binaria vai a leggere i byte effettivi del file; in modalità non binaria alcuni caratteri su alcuni sistemi operativi possono essere trasformati in altri; ad esempio sotto Windows la sequenza "\r\n" viene trasformata in "\n" in lettura (viceversa in scrittura).

Kilin
06-03-2008, 18:47
io mi ero fatto un idea, che a questo punto mi sembra proprio campata in aria, che scrivendo in modalità binaria se scrivo 'a' sul file ritrovo la sua codifica binaria, mentre se leggo 01100001 da file, ad esempio leggo 'a', e non i caratteri '0', '1', '1', '0', '0', '0', '0', '1'... non è così, vero?

è soltanto un problema di sostituzione di \n, \r, ecc? perchè se fosse così non capisco molto bene l'utilità...

questa idea mi era venuta, oltre che per il nome "binary", da una descrizione che ho trovato in una slide di un mio professore, che dice: "ios::binary per I/O binario (gli operatori >> e << non effettuano conversioni di tipo)": che vuol dire questa frase fra parentesi?

vi ringrazio..

MItaly
06-03-2008, 18:53
Originariamente inviato da Kilin
io mi ero fatto un idea, che a questo punto mi sembra proprio campata in aria, che scrivendo in modalità binaria se scrivo 'a' sul file ritrovo la sua codifica binaria, mentre se leggo 01100001 da file, ad esempio leggo 'a', e non i caratteri '0', '1', '1', '0', '0', '0', '0', '1'... non è così, vero?
No, non è così.


è soltanto un problema di sostituzione di \n, \r, ecc? perchè se fosse così non capisco molto bene l'utilità...
L'utilità c'è sì: se devi lavorare su un file non di testo la conversione di caratteri ti può sballare tutto il contenuto del file, mentre nei file di testo è più comodo lavorare sulle stringhe con un solo terminatore di riga piuttosto che con due.
Credo che questa sostituzione sia nata perché molti dispositivi di output consideravano il carriage return (\r) e il line feed (\n) due operazioni differenti (una tornava all'inizio della riga, l'altra andava a capo senza muoversi in orizzontale), ma nella maggior parte dei programmi serviva usare le due operazioni congiuntamente (ottenendo così un ritorno a capo "normale").


questa idea mi era venuta, oltre che per il nome "binary", da una descrizione che ho trovato in una slide di un mio professore, che dice: "ios::binary per I/O binario (gli operatori >> e << non effettuano conversioni di tipo)": che vuol dire questa frase fra parentesi?

Mah... le conversioni di tipo non che c'entrano niente, piuttosto non effettuano conversioni di caratteri (anche se in realtà che io sappia non sono gli operatori << e >> a fare le conversioni, ma lo stream C utilizzato dalle classi di IO).

Loading