AGB  ·  Datenschutz  ·  Impressum  







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

Mal wieder HexToFloat

Offene Frage von "Neutral General"
Ein Thema von echitna · begonnen am 6. Jul 2017 · letzter Beitrag vom 15. Sep 2017
Antwort Antwort
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#1

AW: Mal wieder HexToFloat

  Alt 6. Jul 2017, 10:08
Du kannst folgendes machen:
Delphi-Quellcode:
function HexToSingle(hex: String): Single;
var tmp: Cardinal;
begin
  tmp := StrToInt('$' + hex);
  Move(tmp, Result, SizeOf(Cardinal));
end;
Ich glaube nicht, daß das so gewollt ist. Das Ergebnis ist immer ein denormalisiertes Single. Außerdem kann man so keine negativen Zahlen erhalten. Wie wäre es mit
Delphi-Quellcode:
function HexToSingle(hex: String): Single;
var tmp: smallint;
begin
  tmp := StrToInt('$' + hex);
  Result := tmp;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Mal wieder HexToFloat

  Alt 6. Jul 2017, 12:07
Wie wäre es mit
Delphi-Quellcode:
function HexToSingle(hex: String): Single;
var tmp: smallint;
begin
  tmp := StrToInt('$' + hex);
  Result := tmp;
end;
Eh ja, so gehen alle Nachkommastellen verloren und die Zahl ist komplett falsch.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#3

AW: Mal wieder HexToFloat

  Alt 6. Jul 2017, 13:27
Eh ja, so gehen alle Nachkommastellen verloren und die Zahl ist komplett falsch.
Welche Nachkommastellen? Wie schon gesagt: Solange keine Auskunft über die Bedeutung der 4 Hex-Zeichen gemacht wird (zB: nimm den Integerwert/100), sehe ich erst einmal keine Nachkomnastellen. Deine Nachkommastellen sind doch völlig sinnlos, wenn man bedenkt, daß die kleinste normalisierte Singlezahl ca 1.17549e-38 ist und damit ca 128 mal größer(!) als 9.17963e-41. Und das gilt für jede vierstellige Hexeingabe.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Mal wieder HexToFloat

  Alt 6. Jul 2017, 13:35
Vielleicht waren es auch nur schlechte (zu kurze) Beispiele?
Ich habe es so interpretiert dass er/sie "echte" Floats als Hex-String erhält.
Seine/Ihre Vorgehensweise diese umzuwandeln und dass mein Code das gleiche Ergebnis erzielt scheint das zu bestätigen.

Dass die Ergebnisse nicht so aussehen als wären sie gewollt stimmt wohl.
Es ist wahrscheinlich nicht auszuschließen dass er/sie selbst nicht genau weiß diese Hex-Strings darstellen und wie sie decodiert werden müssen.

Von daher: Wir brauchen mehr Infos.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
981 Beiträge
 
Delphi 6 Professional
 
#5

AW: Mal wieder HexToFloat

  Alt 6. Jul 2017, 13:45
Hmm

Also ich vermute, dass es sich um HalfFloat oder auch Float16 handelt.
Diese haben nur 2 Bytes und werden in Hex eben so dargestellt.

Jedoch müssen diese in Delphi umgerechnet werden auf z.B. single.

Hierbei wird daraus (glaube ich) zunächst ein WORD (mit StrToInt('$'+AString)) gemacht und dieses dann nach Single konvertiert.

Beispiele habe ich keine...
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Mal wieder HexToFloat

  Alt 6. Jul 2017, 13:50
Hierbei wird daraus (glaube ich) zunächst ein WORD (mit StrToInt('$'+AString)) gemacht und dieses dann nach Single konvertiert.

Beispiele habe ich keine...
Das ist was mein Code weiter oben macht. Aber mit Cardinal, statt Word, was aber unterm Strich keinen Unterschied macht.
Das Problem ist, dass ein 16-Bit Float in einem 32-Float nicht den gleichen Wert hat.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
981 Beiträge
 
Delphi 6 Professional
 
#7

AW: Mal wieder HexToFloat

  Alt 6. Jul 2017, 13:54
Hmm..

Müsste sich mit dieser beschreibung nicht das WORD Bitweise zerlegen lassen und damit dann die Float richtig erstellt werden, unabhänging ob nun Single oder Double...

https://en.wikipedia.org/wiki/Half-p...g-point_format
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Mal wieder HexToFloat

  Alt 6. Jul 2017, 14:18
Das Umwandeln von HEX zu Float hat er doch schon?

Nur das weitere Umwandeln von Float zu "String mit Kommastellen" hing.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
601 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

AW: Mal wieder HexToFloat

  Alt 6. Jul 2017, 14:31
Ich begreife immer noch nicht wo denn hier überhaupt Nachkommastellen herkommen sollen?

Wird 0000 übertragen ist das 0, wird FFFF übertragen ist das 65535

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Mal wieder HexToFloat

  Alt 6. Jul 2017, 14:40
Wird 0000 übertragen ist das 0, wird FFFF übertragen ist das 65535
Nö, schau dir mal den Wikipedia-Link an.
es kommt ja darauf an wie die Bits interpretiert werden (müssen)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 16:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz