AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

floatingpoint Werte aus Datei auslesen?

Ein Thema von eXistence · begonnen am 17. Sep 2004 · letzter Beitrag vom 20. Sep 2004
Antwort Antwort
eXistence

Registriert seit: 17. Sep 2004
3 Beiträge
 
#1

floatingpoint Werte aus Datei auslesen?

  Alt 17. Sep 2004, 10:15
hi,
ich versuche mich gerade an einem Datei-Konverter. Die Quelldatei liegt Binär vor und ich hab ne Doku an welcher Stelle welche Werte hinterlegt sind.
Characters und Integer-Werte kann ich auch problemlos auslesen, nur an den floatingpoint-Werten scheitere ich bislang.
ich weiß zwar, wie sie aufgebaut sein sollten, aber irgendwie komme ich trotzdem nicht weiter.

Gibts irgendwo ein Tutorial oder ne Anleitung, damit ich ne ungefähre Vorstellung davon bekomme, wie das funktionieren sollte?
(die Such-Funktion brachte mich leider nicht weiter...)

So funzt es erwartungsgemäß nicht:
Delphi-Quellcode:
function TForm1.GetDouble(scrStream : TStream; iPos : integer) : double;
var   dDouble      :   double;

begin
  scrStream.seek(iPos, soFromBeginning);
  scrStream.readbuffer(dDouble, 8);

  stats.Lines.Add(FloatToStrF(dDouble, ffFixed, 15, 10));


  Result := 1;

end;
zwar bekomme ich einen Wert, aber er entspricht nicht dem, was dort eigentlich stehen sollte...

Aufbau sieht laut Doku so aus:

Delphi-Quellcode:
bit 63 0
+---+-----------+----------------------------------------+
|s | e10..e0 | f51..f0 |
| | | |
+---+-----------+----------------------------------------+

1 bit 11 bits 52 bits
Hat jemand nen Tipp für mich, wie ich da vorgehen muss?
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: floatingpoint Werte aus Datei auslesen?

  Alt 17. Sep 2004, 15:39
Weisst du, wie die Float-Werte gespeichert wurden?
Ob Big- oder Small-Endian macht da nämlich schon einen Unterschied.
Oder ganz banal: Vielleicht wurde ein Single-, Real- oder Extended-Wert geschrieben, anstatt Double zu benutzen.
  Mit Zitat antworten Zitat
Insider2004
(Gast)

n/a Beiträge
 
#3

Re: floatingpoint Werte aus Datei auslesen?

  Alt 18. Sep 2004, 12:57
Was bekommst du denn?
  Mit Zitat antworten Zitat
eXistence

Registriert seit: 17. Sep 2004
3 Beiträge
 
#4

Re: floatingpoint Werte aus Datei auslesen?

  Alt 20. Sep 2004, 10:12
Laut Doku handelt es sich um "IEEE-IEEE-754 Big-Endian Floating Point (Sun, SGI, Convex, HP)"

der Floatingpoint-wert soll sich dann folgendermaßen berechnen:

(-1)**s * 2**(e-1023) * 1.f

(bezogen auf den vorher geposteten Aufbau)

"s" gibt einfach das Vorzeichen an, "e" habe ich als integer-wert ausgelesen, Kopfzerbrechen bereitet mir aber noch f.
Es gibt in Delphi keinen 64bit-unsigend-integer-typ... was mache ich also mit dieser 52-bit-zahl?
Wie lese ich diesen Teil also aus und wie hänge ich ihn an die 1 dran?

oder gibts noch ne andere Variante?


EDIT:
@Insider2004: mit "scrStream.readbuffer(dDouble, 8);" bekomme ich z.B. 1,62211632842598E-319 raus, obwohls eigentlich 512 sein sollte...
die entsprechenden bytes im Hex-Editor sehen so aus: 40 80 00 00 00 00 00 00
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#5

Re: floatingpoint Werte aus Datei auslesen?

  Alt 20. Sep 2004, 15:23
Lies die Zahl Byte für Byte (Byte1, Byte2, ... Byte8) ein, ändere die Reihenfolge der Bytes (Byte8, Byte7, ... Byte1), setz die Bytes wieder zusammen und Du hast den "Delphi-Double"

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
eXistence

Registriert seit: 17. Sep 2004
3 Beiträge
 
#6

Re: floatingpoint Werte aus Datei auslesen?

  Alt 20. Sep 2004, 15:51
@Steve: danke, du bist mein Held des Tages =)
an dem Problem knabber ich nun schon seit Tagen...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz