1

Téma: [vyřešeno] Převod 4 bytů na číslo float

Hezký den, prosím o radu. Načítám data přes RS485 z elektroměru a jednotlivé hodnoty, např. hodnota napětí na jedné fázi je reprezentována jako sekvence 4 bytů. Jsem schopen nějak ve FULL-C z těchto 4 bytů dostat číslo float (Float - Big Endian (ABCD)).

Tohle mi příjde:
[67, 101, 102, 102]

A tohle z toho má vzniknout:
229.4

Takhle to vypadá např. v Javě:

byte[] bytes = {67, 101, 102, 102};        
float f = ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN).getFloat();
//Výsledek je: 229.4

2

Re: [vyřešeno] Převod 4 bytů na číslo float

Možností bude více. Tady popíši jednu z nich.

Nejprve ty bajty uložit do unsigned 32bit typu, tedy v SDS např. "unsigned int".
A ten potom převést přes ukazatel.

 unsigned int a;
 float b;

 // nejprve slozit cislo "a" z tech ctyr prichozich bajtu
 a = (b1 << 24) | (b2 << 16) | (b3 << 8) | b4; // samozrejme pozor na poradi, v SDS je vse little-endian, takze ...

 // precteme obsah pameti, tam kde je ulozeno cislo "a" - ale precteme si to jako typ float
 b = *(float *)&a;

Jak jsem napsal, pozor jestli jsou vaše data Big Endian nebo Little Endian - podle toho je potřeba přeházet pořadí při skládání "a".

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

3

Re: [vyřešeno] Převod 4 bytů na číslo float

Díky moc! Funguje perfektně.