2014-02-24 17 views
8

Ich versuche, Binärdatei mit std::ofstream::write Methode schreiben. Ich fand heraus, dass einige Zeichen nicht geschrieben sind, wie sie sind, zum Beispiel:Std :: ofstream :: write fügt Zeichen hinzu

std::ofstream in("testout"); 
int i =10; 

in.write((const char *)(&i), sizeof(i)); 
in.close(); 

return 0; 

folgendes in eine binäre Datei schreiben wird: 0d 0a 00 00 00 Warum gibt es zusätzliche 0d erscheinen Byte?

Antwort

15

Beim Öffnen müssen Sie std::ofstream::binary angeben.

Else, unter Windows in Text-Datei-Modus, \n (0x0a) in einem Programm umgewandelt werden/von \r\n (0x0d 0x0a) beim Schreiben/Lesen der Datei.

+3

Ich möchte die Haiku-Formatierung zurück! –

+1

@MarkGarcia keine Gedichte hier auf SO;) – P0W

+0

Gut, dass es in der Edit-Sektion für die Ewigkeit erhalten bleibt: p Aber an ein Haiku beim Lesen zu denken Antwort hier ... das allein ist bemerkenswert genug :) – deviantfan

6

Sie haben die Datei im Textmodus geöffnet und unter Windows ausgeführt. Es fügt die 0x0d zu 0x0a hinzu. Sie müssen binär Modus verwenden, wenn Sie die ofstream Instanz erstellen.

4

Die Datei wird auf einem System geschrieben, das Text in binäre Übersetzung übersetzt. Der Wert 10 (0A hex) im untersten Byte von i wird als Zeilenvorschubzeichen (auch als Newline bezeichnet) interpretiert und in eine Wagenrücklaufzeilenfolge (13 10 dezimal, 0D 0A hex) konvertiert.

um dieses Problem zu lösen, die erste Zeile Ihrer Code-Schnipsel wie folgt ändern:

std::ofstream in("testout", std::ios::binary); 

Dies wird die C++ Laufzeitbibliothek anweisen, die Datei als Binärdatei zu behandeln und keine Übersetzung von Bytes zwischen Newline durchführen und Wagenrücklauf-Zeilenvorschub-Sequenzen.

+4

YIKES! Ich denke, ich muss lernen, schneller zu tippen, wie? – CasaDeRobison

+2

http://meta.stackexchange.com/q/9731/203403 –

Verwandte Themen