Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Mal wieder HexToFloat (https://www.delphipraxis.net/193216-mal-wieder-hextofloat.html)

HolgerX 7. Jul 2017 09:58

AW: Mal wieder HexToFloat
 
Passt :thumb:

Jetzt nur noch die umgekehrte Version (von Single nach HEXStr) ... 8-) :wink:

echitna 7. Jul 2017 19:56

AW: Mal wieder HexToFloat
 
Zitat:

Zitat von gammatester (Beitrag 1376102)
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.

Ja das ist leider ein ungewöhnliches Format, aber laut der Doku zu dem Gerät das ich anspreche ist das so verwendet. Ich habe es auch mit einem Port-Monitor geprüft, es werden wirklich nur vier Hex-Zeichen gesendet.

echitna 7. Jul 2017 19:57

AW: Mal wieder HexToFloat
 
Zitat:

Zitat von Neutral General (Beitrag 1376104)
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 :)

echitna 7. Jul 2017 20:00

AW: Mal wieder HexToFloat
 
Vielen Dank für die vielen Tipps. Dann werde ich wohl mal eingiges ausprobieren wenn ich wieder dazu komme.

SirNox 15. Sep 2017 09:12

AW: Mal wieder HexToFloat
 
Hallo zusammen,

ich war gerade auch auf der Suche nach dieser Routine und hab vor diesen Forum folgendes gefunden:

https://gregstoll.dyndns.org/~gregstoll/floattohex/

Dort ist auch Code in anderer Sprache zu finden.

Ich hab die Hexwerte von Netzwerkprotokoll (BACnet) dort getestet und funktioniert:

0100 .... = Application Tag Number: Real (ANSI/IEE-754 floating point) (4)

present-value: 417.500000 (Real)
Hexwert: 43D0C000

Vielleicht bringt es was.

SirNox 15. Sep 2017 09:57

AW: Mal wieder HexToFloat
 
Ich habe nach dem Standard mal gesucht und folgendes gefunden:
http://www.delphipraxis.net/120032-i...l-wandeln.html

Bei mir hat es dann funktioniert:

Delphi-Quellcode:
var
  Data: array[0..3] of byte;
  X: Real;
begin
  Data[3] := aMsg.TheMessage[offset];
  Data[2] := aMsg.TheMessage[offset + 1];
  Data[1] := aMsg.TheMessage[offset + 2];
  Data[0] := aMsg.TheMessage[offset + 3];
  X := PSingle(@data)^;

Neutral General 15. Sep 2017 10:03

AW: Mal wieder HexToFloat
 
Edit: War Unsinn


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr.
Seite 3 von 3     123   

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