fread für long double

12/03/2014 - 10:24 von Markus Donath | Report spam
Ich habe aus einem System Binàrdateien, die Gleitkommawerte als 10-Byte
long double beinhalten. Die habe ich bisher so ausgelesen:

FILE* f = fopen("file.dat", "rb");
long double v;
fread(&v, sizeof(v) /* = 10 */, 1, f);
...

Ich möchte jetzt aber andere (C++)-Compiler verwenden. Bei diesen
scheint der Trend dazu zu gehen, entweder long double synonym zu double
zu verwenden (MSVC, clang, ...), d.h., long double hat nur 8 Byte oder
wie gcc 4.8.2 als 16-Byte-Gleitkommawert. Also steht mir kein
10-Byte-Typ zur Verfügung.

Gibt es eine Möglichkeit, die 10-Byte-Werte auszulösen, auch wenn der
Compiler keinen Typ dafür bereitstellt?

Markus


“Programming is like sex: It may give some concrete results, but that is
not why we do it.”
Bjarne Stroustrup with apologies to Richard Feynman
 

Lesen sie die antworten

#1 Juergen Ilse
12/03/2014 - 11:03 | Warnen spam
Hallo,

Markus Donath wrote:
Ich habe aus einem System Binàrdateien, die Gleitkommawerte als 10-Byte
long double beinhalten. Die habe ich bisher so ausgelesen:

FILE* f = fopen("file.dat", "rb");
long double v;
fread(&v, sizeof(v) /* = 10 */, 1, f);
...

Ich möchte jetzt aber andere (C++)-Compiler verwenden. Bei diesen
scheint der Trend dazu zu gehen, entweder long double synonym zu double
zu verwenden (MSVC, clang, ...), d.h., long double hat nur 8 Byte oder
wie gcc 4.8.2 als 16-Byte-Gleitkommawert. Also steht mir kein
10-Byte-Typ zur Verfügung.



Binaerdarstellungen von Daten sind i.d.R. zwischen verschiedenen C-
Implementierungen nicht portabel. Lebe damit.

Gibt es eine Möglichkeit, die 10-Byte-Werte auszulösen, auch wenn der
Compiler keinen Typ dafür bereitstellt?



Wenn man die genaue Spezifikation des in der Datei abgelegten Formats kennt:
Sicher. Das ist aber nicht unbedingt der Fall, und wenn doch, muss man gffs.
damit rechenen, fuer jeden einzelnen Fall wieder separat eine Implementierung
bauen zu muessen, weil sich ggfs. die binarformate im Speicher unterscheiden
(z.B. aufgrund von unterschiedlicher Endianess oder unterschielichem Fliess-
kommerformat, oder ...).

Tschuess,
Juergen Ilse ()
Ein Domainname ist nur ein Name, nicht mehr und nicht weniger.
Wer mehr hineininterpretiert, hat das Domain-Name-System nicht
verstanden.

Ähnliche fragen