Bytesorozat adott részét float változóba tenni Delphiben

Bytesorozat adott részét float változóba tenni Delphiben
2020-03-22T19:55:54+01:00
2020-03-23T15:44:12+01:00
2022-12-06T09:00:41+01:00
vandammee
Sziasztok!

Egy mikrovezérlő egy bytesorozatot küld a számítógépnek soros porton, amit Delphiben a Cport komponenssel szépen meg is kapok.
Csak azt nem tudom, hogy hogy nyerjem ki a bytesorozatból az adatokat, mert a bytesorozat különböző részei különböző adatokat jelentenek.
Pl. a 3-6 byteokban a mikrovezérlő (Arduino nano) egy 4 byte-os float típusú számot küldött át.
Szóval hogy tudom a Delphiben egy pl. single típusú (azaz szintén 4 byteos real típus) változóba megkapni ezt az értéket.
Mutasd a teljes hozzászólást!
Ha ugyanaz a két gépen a byte-order akkor

-Az első két megoldásban azt használod ki, hogy ugyanazt a memória területet tudod más értelmezésben elérni.  Beolvasol a buffer-be, és kiolvasol a Valtozo-ból

TSorozat = packed record case Boolean of False : (Buffer : array[Byte] of Byte); True : (Valami : Word; Valtozo : Single) end;
a második esetre netangel már írt példát. (működik)

a harmadik eset eltérő byte-order esetén jó, de neked kell megírnod a konverziót (pld: egy endian swap-pel);

TArmRecord = packed record Valami : Word; S : Single; end; TArmRecordHelper = record helper for TArmRecord function ToSingle : Single; end;
ezt egyszerűsítheted a saját record esetén:

TArmRecord = packed record Valami : Word; S : Single; function ToSingle : Single; end;
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd