AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Probleme beim Konvertieren von Hex to Float

Offene Frage von "Bernhard Geyer"
Ein Thema von the3dcloser · begonnen am 5. Okt 2013 · letzter Beitrag vom 5. 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, 20: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
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.157 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Probleme beim Konvertieren von Hex to Float

  Alt 5. Okt 2013, 20: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.
Delphi-Tage 2005-2014

Geändert von himitsu ( 5. Okt 2013 um 20: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, 21: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
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.157 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Probleme beim Konvertieren von Hex to Float

  Alt 5. Okt 2013, 22: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.
Delphi-Tage 2005-2014
  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, 22: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
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.157 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Probleme beim Konvertieren von Hex to Float

  Alt 5. Okt 2013, 22:58
Oder Little-Endian und Big-Endian.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

AW: Probleme beim Konvertieren von Hex to Float

  Alt 5. Okt 2013, 23: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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf