float binär in Datei speichern?
-
Wie speichert man einen float binär in eine Datei - in C ist es einfach - wie geht s aber in C++? ich habe gehofft es würde mit der Klasse ofstream funktionieren:
ofstream x("Filename.data", ios::binary); float f=323.2356f; x<<f;
leider wird der float in Textform gespeichert
-
Das geht z.Bsp. so
x.write(reinterpret_cast<const char*>(&f), sizeof(f));
-
Dazu hätte ich doch gleich auch ne Frage:
In wie fern ist das portabel?
-
Inwiefern portabel?
Es entspricht dem C++Standard. Die binäre Darstellung von Gleitkommazahlen ist auch genormt (IEEE 754).
-
Braunstein schrieb:
Inwiefern portabel?
Es entspricht dem C++Standard. Die binäre Darstellung von Gleitkommazahlen ist auch genormt (IEEE 754).Die ist genormt? Sehr gut zu wissen, danke
-
der C++ standard schreibt allerdings einer implementation nicht vor, sich an diesen IEEE standard zu halten
das ganze ist portabel in dem sinne, dass auf jeder maschine, auf der du das benutzt, du den umgekehrten prozess auf dieser maschine durchführen kannst und das selbe ergebnis erhälst. es gibt dagegen keinen zwang dahin, dass die repräsentation von floats auf verschiedenen systemen identisch ist.
-
camper schrieb:
das ganze ist portabel in dem sinne, dass auf jeder maschine, auf der du das benutzt, du den umgekehrten prozess auf dieser maschine durchführen kannst und das selbe ergebnis erhälst. es gibt dagegen keinen zwang dahin, dass die repräsentation von floats auf verschiedenen systemen identisch ist.
Also wäre es z.B. nicht möglich floats über Netzwerk binär zu übertragen? Wenn nein: Welchen Alternativen nimmt man dann dafür?
mfg.
-
Als Alternative bietet sich der Textmodus an.
-
Braunstein schrieb:
Als Alternative bietet sich der Textmodus an.
Aber ist dies nicht ein bisschen aufwändiger? Und in Spielen z.B. braucht man doch Bandbreite.
mfg.
-
So groß sind floats nun ja nicht. Wenn das aber doch ein Problem sein sollte, bleibt dir nichts anderes übrig, als selbst in ein (plattformunabhängiges) Format zu konvertieren.