2016-10-20 3 views
-1

Ich möchte eine Reihe von ganzen Zahlen in eine Datei schreiben und dann in der Lage sein, sie später zu lesen. Mein Problem ist, dass kleinere Integer weniger als 4 Byte verwenden, wenn ich die Ganzzahlen in eine Datei schreibe. Also wird 1 zum Beispiel als 01 und nicht als 00 00 00 01 dargestellt. Das bedeutet, dass ich Schwierigkeiten haben werde, die Datei zu lesen, weil ich nicht weiß, wo eine ganze Zahl beginnt und endet. Wie mache ich es so, dass die ganze Zahl, die ich in die Datei schreibe, immer 4 Bytes lang ist? Mein Code ist unten:C++ Wie schreibe ich ganze Zahlen in eine binäre Datei, die 4 Bytes lang bleiben

std::fstream file; 
file.open("test.bin", std::ios::out | std::ios::binary); 
for each(int i in vectorOfInts) { 
    file << i; 
} 
file.close(); 
+0

Verwenden [ 'file.write()'] (http://en.cppreference.com/w/cpp/io/basic_ostream/schreibe) dann. –

+1

Mögliches Duplikat von [Warum sollten unsignierte Zeichen zum Schreiben in Binärdateien verwendet werden? Und warum sollten Stream-Operatoren nicht verwendet werden, um in Binärdateien zu schreiben?] (Http://stackoverflow.com/questions/7460206/why-use-unsigned-chars-for-writing-to-binary-files-and-why -souldnt-stream-ope) –

+0

Warum willst du "00 00 00 01" schreiben? – RyanP

Antwort

3

Sie scheinen zwischen Text- und Binärdateien verwirrt zu sein. Der Operator << wird für Textdateien verwendet. Es konvertiert den Wert in Text und schreibt diesen in die Datei. Sie müssen die Methode write verwenden, um eine Ganzzahl im nativen Binärformat in eine Datei zu schreiben. Das Folgende würde die 4 Bytes in die Datei schreiben.

file.write(reinterpret_cast<const char *>(&i), sizeof(i)); 

Möglicherweise müssen Sie auch die Endianität der Daten berücksichtigen, je nachdem, was die Daten zurücklesen werden.

Sie können auch den gesamten Vektor ohne eine Schleife schreiben mit:

file.write(reinterpret_cast<const char *>(&vectorOfInts[0]), vectorOfInts.size()*sizeof(int)); 
+0

ah sehe ich das Licht jetzt –

Verwandte Themen