Binäres Lesen und Schreiben
-
Ich weiß, dass man das binäre Schreiben und Einlesen gut über streams bewerkstelligen kann. Dazu gibt man zum Beispiel an:
std::ofstream("Datei",std::ios::bin);Oder sehe ich da etwas falsch? Jedenfalls würde ich gern wissen, kann ich dem ofstream Objekt einfach alles übergeben, wie es im normalen Schreibmodus auch der Fall ist, also:
int i=3; bool b=true; ofstream off("Datei",std::ios::bin); off<<"Foobar\n"; off<<i; off<<b;Oder ist es in dem Fall anders? Dann würde ich gern wissen, wenn ich nun so eine Datei geschrieben habe, kann ich sie dann mit ifstream einfach wieder einlesen und erhalte so den Text, den ich mit ofstream geschrieben habe? Oder muss ich etwas dabei beachten?
-
op<< und op>> arbeiten lexikalisch, binär arbeiten die member-funktionen read und write
-
@lotz: Kannst du das bitte nocheinmal ausführlicher formulieren?
@OP:
Kevinus schrieb:
[...] Oder sehe ich da etwas falsch?
Nein.
Kevinus schrieb:
Jedenfalls würde ich gern wissen, kann ich dem ofstream Objekt einfach alles übergeben, wie es im normalen Schreibmodus auch der Fall ist [...]
Ja.
Kevinus schrieb:
Oder ist es in dem Fall anders?
Nein.
Kevinus schrieb:
Dann würde ich gern wissen, wenn ich nun so eine Datei geschrieben habe, kann ich sie dann mit ifstream einfach wieder einlesen und erhalte so den Text, den ich mit ofstream geschrieben habe?
Ja.
Kevinus schrieb:
Oder muss ich etwas dabei beachten?
Nein.
Ach, ich liebe Entscheidungsfragen

Greetz, Swordfish
PS: Im Binärmodus wird "\r\n" nicht übersetzt.
-
Das heißt die muss ich zusätzlich setzen wenn ich das ganze wieder eingelesen habe? oder ein anderes Trennzeichen definieren?
-
Swordfish schrieb:
...
Nein.
...
Ja.
...
Nein.
...
Ja.
...
Nein.
...Besser hätte man in einem Thread über binäres Lesen und Schreiben weder fragen noch antworten können !

Gruß,
Simon2.
-
Binärdateien sind prinzipiell nicht portabel, da müsstest du dir schon ein portables Format basteln.
op<< und op>> zerlegen ein binäres Objekt in Zeichen, d.h. dass ein 32Bit großer Integer mit dem Inhalt 0x000000FF in der Datei mit der Zeichenfolge "255" dargestellt wird.
-
Also geht es doch nicht so einfach mit den Streams? Versteh grad nicht mehr richtig , wer hat jetzt Recht?
Edit:0x000000FF ist das nicht der Wert 255, dass heißt das das << und >> Hexdezimalwerte in Integer umwandeln
.
-
Kevinus schrieb:
wer hat jetzt Recht?
Lotz und ich haben uns in keinster Weise widersprochen.
Und im Zweifellsfall leite ich den Rat von Kräuterpfarrer Dungl weiter: "Probiern sie's doch einfach einmal aus..."

Greetz, Swordfish
-
Also geht es einfach nur mit ofstream binär(0 und 1) in die Datei zu schreiben und dann mit ifstream wieder auszulesen, um dann das geschriebene, ohne die Escapesequenzen \r und \n zurück zu erhalten? Gut, werden andere Escapesequenzen auch nicht interpretiert?
-
Wenn du etwas binärspeicherst und liest, wird gar nix interpretiert, es wird einfach die von die bestimmte Anzahl von bytes gelesen oder geschrieben von einer von dir angegebenen Quelle.
Und das geschieht mit den Methoden read und write der streams.Und nein ein op<< konvertiert nicht zwischen hexadezimal und dezimal, ich habe den Inhalt des Integers einfach nur Hexadezimal angegeben, weil man rohe Daten für gewöhnlich so angibt. Hätte auch einfach 255 schreiben können, aber hätte dich evt. auch verwirrt wenn ich schreibe 255 wird zu "255".
Du kannst allerdings einstellen zu welcher Basis deine Zahlen angegeben werden, aber das hat mit der eigentlichen Frage nichts zu tun.