![]() |
2 Word zu einer Single
Hallo
Ich habe das Problem über einen Modbus einen Real auszulesen. Da der Modbus keine Real mag habe ich einfach die Gleitkommazahl (32bit) in 2 Words (a 16bit) Zerlegt und übertrage einfach diese. Nun ist mein Problem, das ich die in Delphi nicht wieder zusammen und dann in eine real/float/Single bekomme. :( Einfach mal das 2te Word nach links schieben (shl 16) und dann das Erste dazuaddieren und zu einer Single machen klappt ja schon aber dann habe ich nur eine sehr große Ganzzahl und nicht meine real ... *gruebel* Das selbe Problem musste ich schon mal in C# lösen ... da gabs so nen schönen BitConverter hat Delphi sowas auch!? Habt ihr da ne idee wie das klappen könnte? |
Re: 2 Word zu einer Single
Ich würde das per absolute lösen
Delphi-Quellcode:
Hintergrund: Durch die absolute-Direktive stehen beide Variablen im Speicher an der gleichen Stelle.
procedure Bla;
var MyInt : Integer; MySingle : Single absolute MyInt; begin MyInt := (Word1 shl 16) + Word2; //et voila ... MySingle hat den gewünschten Wert end; |
Re: 2 Word zu einer Single
Thanks
Cool ... :thumb: Und ich habe schon befürchtet ich müsse (manuel) Pointer verbiegen oder gar das Single bitweise setzen. :stupid: |
Re: 2 Word zu einer Single
Oder als VariantenRecord :
Delphi-Quellcode:
Type
TWordSingle = Record case Integer of 1 : (Words : Array[0..1] of Word); 2 : (SingleValue : Single); end; .... WordSingle.Words[0] := Word1; WordSingle.Words[1] := Word2; Result := WordSingle.SingleValue; |
Re: 2 Word zu einer Single
Klappt beides recht fein. :)
Interesanterweise wird 12,34 in 12,3400001525879 umgewandelt. Was mich (beim REAL) nicht wirklich verwundert stört. Mit dem BitConverter habe ich allerdings ein 12,34 zurückbekommen ... ob da wohl einer rundet. -.-" |
Re: 2 Word zu einer Single
Single und eigentlich alle Fließkommatypen runden nunmal alle, bedingt durch ihre interne Darstellung.
Und so schwer ist das mit den Pointern nun auch nicht.
Delphi-Quellcode:
var L: LongWord;
S: Single; S := PSingle(@L)^; |
Re: 2 Word zu einer Single
Naja .. schwer mag das nicht sein aber ..
a) mag ich Pointer eigentlich nicht und b) habe ich wegen a keine übung/erfahrung mit pointern. :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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