farid hat geschrieben:Kannst Du bestätigen, daß diese Datei mit Turbo Pascal erstellt wurde (und nicht etwa mit einem anderen Pascal-Compiler/Interpreter)? Dann suche ich mal das genaue Bitmuster aus der Borland-Doku heraus.
Okay, ich antworte auf meine eigene Frage.
Laut Doku von TP 6.0, gibt es folgende interne Darstellungen:
* Real: belegt 6 Bytes (48 Bit), die so angeordnet sind:
MSB -> LSB
v (1 bit): Vorzeichenbit
f (39 bit): Mantisse
e (8 bit): Exponent
if 0 < e <= 255 then w = (-1)^v * 2^(e-129) * (1.f)
if e = 0 then w = 0
NaNs und denormalisierte Zahlen können nicht im Format Real gespeichert werden: denormalisierte Zahlen werden gleich 0 gesetzt, NaNs und Unendlichkeiten erzeugen einen Überlauf.
* Single: belegt 4 Bytes (32 bit), die so angeordnet sind:
MSB -> LSB
v (1 bit): Vorzeichenbit
e (8 bit): Exponent
f (23 bit): Mantisse
if 0 < e and e < 255 then w = (-1)^v * 2^(e-127) * (1.f)
if e = 0 and f <> 0 then w = (-1)^v * 2^(-126) * (0.f)
if e = 0 and f = 0 then w = (-1)^v * 0
if e = 255 and f = 0 then w = (-1)^v * Inf
if e = 255 and f <> 0 then w = NaN
* Double: belegt 8 Bytes (64 bit), die so angeordnet sind:
MSB -> LSB
v (1 bit): Vorzeichenbit
e (11 bit): Exponent
f (52 bit): Mantisse
if 0 < e and e < 2047 then w = (-1)^v * 2^(e-1023) * (1.f)
if e = 0 and f <> 0 then w = (-1)^v * 2^(-1022) * (0.f)
if e = 0 and f = 0 then w = (-1)^v * 0
if e = 2047 and f = 0 then w = (-1)^v * Inf
if e = 2047 and f <> 0 then w = NaN
* Extended: belegt 10 Bytes (80 bit), die so angeordnet sind:
MSB -> LSB
v (1 bit): Vorzeichenbit
e (15 bit): Exponent
i (1 bit): (siehe Formel unten)
f (63 bit): Mantisse
if 0 <= e and e < 32767 then w = (-1)^v * 2^(e-16383) * (i.f)
if e = 32767 and f = 0 then w= (-1)^v * Inf
if e = 32767 and f <> 0 then w = NaN
Das müßte man jetzt nur noch zu einem Python-Modul umschreiben (z.B. indem man sich an 'struct' oder 'array' anlehnt, und schon kann man dann die Turbo Pascal Binärdaten lesen.
Hoffentlich habe ich da keine Tippfehler drin.