Forum: PC-Programmierung 6 Byte Pascal Real-Format


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von PETROV (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Freunde !

Ich habe Datenfiles, die in Turbo Pascal 6.0 erstellt wurden, und muß
nun die Daten extrahieren.

Probleme habe ich bei den Real-Typen.
Pascal verwendet ein 6 Byte Format, und ich habe im Netz schon einige 
Zeit gestöbert, aber immer unterschiedliche Definitionen gefunden.

Entweder

 MSB      -----     LSB
 1 Bit Vorzeichen, 39 Bit Mantisse, 8 Bit Exponent

oder
 MSB      -----     LSB
 8 Bit Exponent, 1 Bit Vorzeichen, 39 Bit Mantisse

mit der Konvertierungsfunktion

S=Vorzeichen
E=Exponent
M=Mantisse

Double = (-1)^S*2^(E-129)*(1.M)  bei 0>E<=255
Bei E=0 => Double = 0

Wobei ich die Mantisse Bitweise in ein Double konvertiere und solange
durch 10 Dividiere bis sie < 1 ist und dann 1 hinzuaddiere (1.M)

Ich habe schon alle Varianten ausgetestet - aber ich bekommen nie
vernünftige Zahlen raus.

Da ich leider kein Turbo Pascal habe, habe ich auch keine Referenzdaten
Bytefolge und Double Wert um dies zu überprüfen.

Vielleich hat jemand solche Daten , oder weiß was falsch ist.

Danke

Gruß Peter

von Arne (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Delphi kann doch noch das alte 6Byte Real Format lesen. Bastel dir doch 
einen Konverter in Delphi.

von PETROV (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich muß das leider in VB machen

von U.R. Schmitt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
PETROV schrieb:
> Ich muß das leider in VB machen
Warum 'muss'? Man nimmt das was passt. Dann könntest du zumindest Delphi 
nehmen und damit ein paar einfache Zahlen erzeugen und abspeichern und 
damit herausfinden wie die Konvertierung aussieht.

PETROV schrieb:
> Wobei ich die Mantisse Bitweise in ein Double konvertiere und solange
> durch 10 Dividiere bis sie < 1 ist und dann 1 hinzuaddiere (1.M)
Das kapiere ich ehrlich gesagt nicht. Die Mantisse ist doch binär, also 
warum durch 10 dividieren?

Schau dir mal genau die IEEE 754 oder ähnliche Definitionen zu Floating 
point Zahlen an. Ich meine zwar daß Turbo Pascal keiner der Standards 
genommen hat, aber vieleicht ähnlich.

Wenn du was raus findest wäre es nett das hier zu posten.
Viel Erfolg

von PETROV (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe das schon erfolgreich vom S5-Real Format in IEE754
genacht.

Die Mantisse ist der Wert nach dem Komma (1.M) daher die Mantisse sooft 
durch 10 bis sie "Dezimal" kleiner als 1 ist und dann 1 dazu.

VB muß deßhalb sein, da diese Funktion ein ADD-ON für WINCC sein muß, 
das geht mit Delphi nunmal nicht.

Weiss jemand welche der Defininitionen nun die richtige ist ?

Gruß peter

von gk (Gast)


Bewertung
0 lesenswert
nicht lesenswert
PETROV schrieb:
> MSB      -----     LSB
>  1 Bit Vorzeichen, 39 Bit Mantisse, 8 Bit Exponent

Das ist der Datentyp Real48( aus Object Pascal Sprachreferenz zu D5). 
Bei den anderen Real-Typen ist das Vorzeichenbit auch immer das MSB.

gk

von PETROV (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke

von Roland (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo PETROV!

Ich beziehe mich auf Turbo Pascal (TP) 5.0, dürfte aber auch für 6.0 
gelten:
Die Definition
MSB      -----     LSB
1 Bit Vorzeichen, 39 Bit Mantisse, 8 Bit Exponent

Real = (-1)^S*2^(E-129)*(1.M)  bei 0<E<=255 (Korrektur "<" statt ">")
Bei E=0 => Real = 0

ist OK, ABER TP-intern wird das höchstwertige Byte (das  mit dem 
Vorzeichen) an die höchste Speicheradresse gelegt, dann kommen die 
restlichen Bytes der Mantisse in Richtung absteigender Adressen und zum 
Schluss der Exponent an der niedrigsten Speicheradresse.
Zum Hinausschreiben wird in TP die BlockWrite-Prozedur verwendet, und 
die beginnt aber mit der Schreibeoperation von der niedrigsten Adresse 
aus => beim Lesen mit VB bekommst Du zuerst den Exponenten!

Grüße
Roland

von PETROV (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke Roland für Deine Info - Jetzt gehts's

Peter

von Hatte gleiches Problem (Gast)


Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.