Datentypen auf x86 Platform
-
Ich arbeite gerade an einem eigenen Dateiformat. Ich möchte dabei beispielsweise Koordinaten etc. in der Datei binär speichern um die Dateigröße und damit die Lesegeschwindigkeit zu erhöhen. Das ganze soll auf x86 CPUs laufen, sowohl unter Linux, als auch Windows.
Meine Frage ist nun:
Kann ich einfach z.B. einen float nehmen und ihn einfach so in die Datei schreiben? Ist die Interpretation der Daten abhängig vom CPU?
Sind Mantisse, Exponent und Vorzeichen überall gleich? IEEE 754?
Ich finde irgendwie nichts darüber...Little bzw. BigEndian ist laut Wikipedia zumindest schon mal kein Problem.
Dank im voraus,
Coolcat
-
Hallo,
Java, .NET, Ruby etc.. stellen für dich sicher, dass du mit korrekten Datentypen handhabst.
Bleiben also C und C++ übrig.Strukturen/Klassen darfst du nicht so einfach wegschreiben.
Wenn du sowas machst, bist du nicht sicher. Dein Compiler kann mal eben padding bytes in deine Struktur einbauen. Beim laden der Datei mit der nächsten Programmversion von dir knallt's:// böse! fwrite ((const void*)my_structure_object, 1, sizeof(my_structure, file_stream);
Ok, also keine Objekte in einem Aufruf speichern.
Du fragest aber nach den integralen Datentypen.
Da müsstest du jetzt mal im Handbuch deines Compilers nachschauen, aber die Größe der Datentypen wird im C/C++ Standard nicht festgelegt. Es gibt Empfehlungen, mehr nicht.Was soll man jetzt genau machen? Gute Frage, weiß ich eigentlich selber nicht
Sonst wer?
-
Java, .NET, Ruby etc.. stellen für dich sicher, dass du mit korrekten Datentypen handhabst.
Bleiben also C und C++ übrig.Sorry, da die Seite hier c-plusplus.net heißt hatte ich angenommen das klar ist das ich von C/C++ rede.
Da müsstest du jetzt mal im Handbuch deines Compilers nachschauen, aber die Größe der Datentypen wird im C/C++ Standard nicht festgelegt.
Das ist richtig. Allerdings müsste das doch vom CPU und dessen FPU abhängig sein, nicht vom Compiler?
Falls aber doch, ich benutze im Moment GCC 4.1.
Coolcat
-
Die Datentypen sind vom Compiler und vom System abhängig, wobei die Unterschiede von Plattform zu Plattform sicher größer sind als die zwischen verschiedenen Compilerversionen.