Seite 1 von 1

FLOAT-Zahl aus 2x 16 bit HEX

Verfasst: Mittwoch 20. August 2014, 13:20
von grinder25
Hallo,

Ich habe ein Programm geschrieben dass über Modbus TCP ein Messgerät ausliest.
Das Ergebniss des Messgeräts ist eine FLOAT-Zahl nach IEE 754 (z.B. 0x436bbc2a für 235.73502).

Mittels pymodbus erhalte ich das Ergebnis in einer Liste mit zwei Einträgen:
u1[1] = 0x436b und u1[2] = 0xbc2a

Wie bekomme ich jetzt diese zwei Einträge zusammen und daraus meine Floatzahl??

Ich hatte mir es folgendermaßen vorgestellt:

zusammen=bin(u1[0]<<16) | bin(u1[1])
zahl=float(zusammen)

Erhalte aber den Fehler:
TypeError: unsupported operand type(s) for |: 'str' and 'str'

Hab noch andere Methoden versucht aber keine hat funktioniert. Vllt steh ich ja auf dem Schlauch.
Ich hoffe es findet sich eine Lösung

Re: FLOAT-Zahl aus 2x 16 bit HEX

Verfasst: Mittwoch 20. August 2014, 13:21
von EyDu
Hallo und willkommen im Forum!

Schau dir mal das struct-Modul an.

Re: FLOAT-Zahl aus 2x 16 bit HEX

Verfasst: Mittwoch 20. August 2014, 15:14
von grinder25
Danke für den Tip!

Hab noch etwas Probleme mit Little/Big-Endian gehabt aber so funktionierst:

u1 = unpack('>f', pack('>H', u1_raw[0]) + pack('>H', u1_raw[1]))
print(hex(u1_raw[0]))
print(hex(u1_raw[1]))
print(u1[0])

Ausgabe:
0x436e
0x63dd
238.390090942

Re: FLOAT-Zahl aus 2x 16 bit HEX

Verfasst: Mittwoch 20. August 2014, 16:25
von BlackJack
@grinder25: Das ist ein wenig umständlich zweimal `pack()` aufzurufen, IMHO.

Edit:

Code: Alles auswählen

In [43]: u1_raw
Out[43]: [17262, 25565]

In [44]: unpack('>f', pack('>2H', *u1_raw))[0]
Out[44]: 238.3900909423828