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
Delphi kann doch noch das alte 6Byte Real Format lesen. Bastel dir doch einen Konverter in Delphi.
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
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
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
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
Ok, ist schon erledigt. Aber für die Zukunft: http://www2.informatik.uni-halle.de/lehre/pascal/sprache/pas_ieee.html http://www.infosun.fim.uni-passau.de/cl/passau/kuwi97/zahlen.pdf http://books.google.de/books?id=hCVg1F0fJv0C&pg=PA33&lpg=PA33&dq=turbo+pascal+real+interne+darstellung&source=bl&ots=dTecih1n0S&sig=lLtcjs5zy4p1SrzVIRGtzken7Zo&hl=de&ei=-vnPTZ_7LoyTswaSpvSwCw&sa=X&oi=book_result&ct=result&resnum=7&ved=0CEQQ6AEwBg#v=onepage&q&f=false
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.