AGB  ·  Datenschutz  ·  Impressum  







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

Probleme beim Konvertieren von Hex to Float

Offene Frage von "Bernhard Geyer"
Ein Thema von the3dcloser · begonnen am 5. Okt 2013 · letzter Beitrag vom 6. Okt 2013
Antwort Antwort
the3dcloser

Registriert seit: 5. Okt 2013
19 Beiträge
 
#1

Probleme beim Konvertieren von Hex to Float

  Alt 5. Okt 2013, 21:18
Hallo liebe Community,
ich bin neu hier und habe ein kleines Problem mit einem Programm:
Ich möchte aus einer Datei per TFileStream 4 Bytes auslesen lassen, und diese dann in eine Gleitkommazahl konvertieren. Als Ausgabe habe ich hier schlicht ein einfaches Editfeld genommen.

Delphi-Quellcode:
procedure TGEOtool.ExportGEOClick(Sender: TObject);
var GEO:TFileStream;
    A:Single;
begin

GEO:=TFileStream.Create('F:\Tools\GEOtool\Files\Autobahn.geo', fmOpenRead);
GEO.Position:=0;
GEO.Seek(311, sofromcurrent);
GEO.ReadBuffer(A, 4);
Edit1.Text:=FloatToStr(A);
GEO.Free;
end;
Problem an der ganzen sache: Delphi schmeißt mir die Zahl -4,17242134176377E-8 um die Ohren. an sich eigentlich eine gute Sache, da das Programm dann immerhin schonmal seine Arbeit tut. Wenn ich mir aber die Datei in einem Hex-Editor ansehe, die 4 Bytes ab 311 nehme und diese dann in einen Onlinekonverter (z.b: Ich bin ein Link) eingebe, kommt eine andere Zahl (45.050) heraus. Was mache ich also demnach falsch?

Hier noch ein Bild aus dem Hex-Editor (die betroffenen Bytes sind (sollten) markiert sein, d.h. 311-314):
Miniaturansicht angehängter Grafiken
hexeditor.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.016 Beiträge
 
Delphi 12 Athens
 
#2

AW: Probleme beim Konvertieren von Hex to Float

  Alt 5. Okt 2013, 21:47
Wenn ich auf die ByteOrder achte, dann komm ich darauf, daß du was falsch machst, bzw. das Programm korrekt arbeitet.

PS:
Delphi-Quellcode:
GEO.Position:=0;
GEO.Seek(311, sofromcurrent);
Nja, abgesehn davon daß der Filestream, nach dem Öffnen, sich eh schon an Position 0 befindet...

GEO.Position := 311; oder nur GEO.Seek(311, soFromCurrent); , bzw. wie wäre es mit soFromBeginning?
Miniaturansicht angehängter Grafiken
unbenannt.png  
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 5. Okt 2013 um 21:52 Uhr)
  Mit Zitat antworten Zitat
the3dcloser

Registriert seit: 5. Okt 2013
19 Beiträge
 
#3

AW: Probleme beim Konvertieren von Hex to Float

  Alt 5. Okt 2013, 22:30
Ok, heißt das, dass Delphi diese 4 Bytes immer von hinten einliest? Wie kann man dann einstellen, dass auch die Bytes 1und 2 dann "sign" und den "exponent" stellen?

Ansonsten schonmal danke für die Lösung.

PS: Wenn man Teile davon später in Schleifen packt, macht das dann schon etwas Sinn. Das GEO.Poition:=0 am Anfang soll nur zur Sicherheit dienen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.016 Beiträge
 
Delphi 12 Athens
 
#4

AW: Probleme beim Konvertieren von Hex to Float

  Alt 5. Okt 2013, 23:09
Njain.

Bei der Darstellung mit 0x*****. bzw $****** ist Links das MSB (groß) und rechts das LSB (klein).

Die Variablen liegen aber andersrum im Speicher, als Links klein und Rechts groß. (somit liegen die unterschiedlichen ordinalen Typen praktisch übereinander)

Code:
11       =      $11 (Byte)
1122     =    $2211 (Word)
11223344 = $44332211 (LongWord)
^^ hier zeigt z.B. der Pointer drauf
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Probleme beim Konvertieren von Hex to Float

  Alt 5. Okt 2013, 23:38
Man nennt das ganze "Intel-Byteorder" (erst wird das Low-Byte, dann das High-Byte abgelegt). Im Gegensatz dazu gibt es noch die "Motorola-Byteorder", wo erst das High-Byte, dann das Low-Byte abgelegt wird.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.016 Beiträge
 
Delphi 12 Athens
 
#6

AW: Probleme beim Konvertieren von Hex to Float

  Alt 5. Okt 2013, 23:58
Oder Little-Endian und Big-Endian.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.192 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Probleme beim Konvertieren von Hex to Float

  Alt 6. Okt 2013, 00:48
Ok, heißt das, dass Delphi diese 4 Bytes immer von hinten einliest? Wie kann man dann einstellen, dass auch die Bytes 1und 2 dann "sign" und den "exponent" stellen?
Nein. Nicht Delphi macht das sondern der Prozessor gibt das vor. Lies dir am besten dazu den Wiki-Artikel durch.
Windows Vista - Eine neue Erfahrung in Fehlern.
  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 01:50 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