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
Seite 1 von 2  1 2      
gammatester

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

AW: Mal wieder HexToFloat

  Alt 6. Jul 2017, 09:33
Was soll das für ein Format sein? 4 Hex-Zeichen sind 16-Bit, das ist ein Format, das ungeöhnlich ist (single hat 32-Bit). Ohne Dokumentation des internen Aufbaus des 16-Bit-Wortes kann man wohl wenig sagen oder helfen.
  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, 09:38
Du kannst folgendes machen:
Delphi-Quellcode:
function HexToSingle(hex: String): Single;
var tmp: Cardinal;
begin
  tmp := StrToInt('$' + hex);
  Move(tmp, Result, SizeOf(Cardinal));
end;

var f: Single;
begin
  f := HexToSingle('FFE4');
  Caption := FloatToStr(f);
end;
Prinzipiell kannst du mit FloatToStrF oder Format die Zahl (wenn du sie als String ausgeben willst) auf X Nachkommastellen formatieren.
Hinweis: 9.17963e-41 ist NICHT 0,00000917. Die Darstellung "9.17963e-41" wird benutzt, weil die Zahl ausgeschrieben so aussehen würde:

0,0000000000000000000000000000000000000000917963
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, 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
 
#4

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
 
#5

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
 
#6

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
989 Beiträge
 
Delphi 6 Professional
 
#7

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 himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.583 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
echitna

Registriert seit: 3. Jan 2005
Ort: Clausthal-Zellerfeld
25 Beiträge
 
Delphi XE5 Professional
 
#9

AW: Mal wieder HexToFloat

  Alt 7. Jul 2017, 19:57
Du kannst folgendes machen:
Delphi-Quellcode:
function HexToSingle(hex: String): Single;
var tmp: Cardinal;
begin
  tmp := StrToInt('$' + hex);
  Move(tmp, Result, SizeOf(Cardinal));
end;

var f: Single;
begin
  f := HexToSingle('FFE4');
  Caption := FloatToStr(f);
end;
Prinzipiell kannst du mit FloatToStrF oder Format die Zahl (wenn du sie als String ausgeben willst) auf X Nachkommastellen formatieren.
Hinweis: 9.17963e-41 ist NICHT 0,00000917. Die Darstellung "9.17963e-41" wird benutzt, weil die Zahl ausgeschrieben so aussehen würde:

0,0000000000000000000000000000000000000000917963
Sorry, war nur zu faul die vielen nullen zu tippen
  Mit Zitat antworten Zitat
echitna

Registriert seit: 3. Jan 2005
Ort: Clausthal-Zellerfeld
25 Beiträge
 
Delphi XE5 Professional
 
#10

AW: Mal wieder HexToFloat

  Alt 7. Jul 2017, 20:00
Vielen Dank für die vielen Tipps. Dann werde ich wohl mal eingiges ausprobieren wenn ich wieder dazu komme.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:02 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