![]() |
Umwandlung 4byte Hex zu IEEE single
Von einem seriellen Gerät wird ein String gesendet: ½áG®. Den kann ich problemlos in hex umwandeln (mit IntToHex(Ord(x)) für jedes byte): BDE147AE, komme dann aber nicht mehr weiter:(. Schlussendlich sollte er aber in ein IEEE Single umgewandelt werden. In diesem Falle sollte das -0.11 sein. Wie wandle ich nun den String ½áG® in ein Single um?
|
AW: Umwandlung 4byte Hex zu IEEE single
Nimm einen VariantenRecord :
Delphi-Quellcode:
Type
TByteToSingle = Record Case Integer of 1 : (TheBytes : Array[0..3] of Byte); 2 : (TheSingle : Single); end; Var MyRec : TByteToSingle; Begin MyRec.TheBytes[0] := Dein1.Byte; MyRec.TheBytes[1] := Dein2.Byte; ... Result := MyRec.TheSingle; |
AW: Umwandlung 4byte Hex zu IEEE single
Hallo,
Du hast also einen String? Guck mal:
Delphi-Quellcode:
Weiß nicht wie du den String reinbekommst. Wenns bei dir in der Praxis nicht funktioniert, dann lass das ReverseString mal weg.
uses
StrUtils; // Für ReverseString procedure TForm1.FormCreate(Sender: TObject); var tmp: Single; str: AnsiString; begin str := '½áG®'; str := ReverseString(str); tmp := PSingle(@str[1])^; Caption := FloatToStrF(tmp,ffNumber,3,2); end; Nachtrag: Wenn du die Daten auch als Bytes/Byte-Array o.ä. bekommst, dann wäre so ein Varianten-Record wie guinnes es vorgeschlagen hat natürlich eleganter. |
AW: Umwandlung 4byte Hex zu IEEE single
Danke, das habe ich gesehen und auch eingehende ausgetestet: BDE147AE (oder die bytes 189 225 71 174) ergeben bei mir aber -4.54478572831096E-11 und nicht -0.11. In die andere Richtung klappt es mit IntToHex(PInteger(@single)^,8) problemlos aber die Umwandlung zu single stimmt leider einfach nicht.
|
AW: Umwandlung 4byte Hex zu IEEE single
Mit dem Befehl ReverseString klapp nun alles! Wunderbar, herzlichen Dank
|
AW: Umwandlung 4byte Hex zu IEEE single
Machs bitte NICHT mit ReverseString wenn du die Daten auch als Bytes vorliegen hast.
ReverseString ist nur dafür da, dass aus BDE147AE, AE47E1BD wird. Kannst du mal ein bisschen Code zeigen, damit wir sehen wie du die Daten erhältst? Dann könnte man eine ideal(ere) Lösung finden. |
AW: Umwandlung 4byte Hex zu IEEE single
Ich erhalte die Daten als AnsiString in einer Variabeln Packet.Data (aus einem Event). Daraus lese ich am richtigen Offset die Daten aus und wandle sie um, das ist schon alles:
Delphi-Quellcode:
strIn := Copy(Packet.Data,intOffset,4);
strIn := ReverseString(strIn); sngResult := PSingle(@strIn[1])^; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 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 by Thomas Breitkreuz