std :: ofstream :: write fügt Zeichen hinzu

8

Ich versuche eine Binärdatei mit std::ofstream::write method zu schreiben. Ich habe herausgefunden, dass einige Zeichen nicht so geschrieben sind, wie sie sind, zum Beispiel:

%Vor%

schreibt Folgendes in eine Binärdatei: 0d 0a 00 00 00 Warum erscheint zusätzliches 0d byte?

    
coffee 24.02.2014, 08:45
quelle

3 Antworten

16

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

Sonst, in Windows im Textdateimodus, wird \n ( 0x0a ) in einem Programm in / von \r\n ( 0x0d 0x0a ) konvertiert, wenn die Datei geschrieben / gelesen wird.

    
deviantfan 24.02.2014, 08:52
quelle
6

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

    
littleadv 24.02.2014 08:53
quelle
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 Zeilenvorschub (auch als Newline bezeichnet) interpretiert und in eine Wagenrücklauf-Zeilenvorschubsequenz (13 10 dezimal, 0D 0A hex) konvertiert.

Um dieses Problem zu lösen, ändern Sie die erste Zeile Ihres Code-Snippets wie folgt:

%Vor%

Dies weist die C ++ - Laufzeitbibliothek an, die Datei als binär zu behandeln und keine Byte-Umsetzung zwischen Zeilenvorschub- und Wagenrücklauf-Zeilenfolgen durchzuführen.

    
CasaDeRobison 24.02.2014 08:55
quelle

Tags und Links