Der Martin: Typumwandlung 2 x 16 Bit Word zu 1 x 32 Bit Fließkomma

Beitrag lesen

Hallo,

ich habe zwei 16 Bit Words (0-65535) und möchte die zusammenkleben, so dass Javascript daraus eine Fließkomma-Zahl mit 32 Bit erkennt (Unsigned).
mit Fließkomma meinst du IEEE single precision?
Solche Typumwandlungen, bei denen einfach nur die speicher- oder prozessorinterne Repräsentation eines Datentyps als etwas anderes interpretiert wird, sind mit Javascript AFAIK nicht möglich.

Es handelt sich um eine Node.JS Applikation ...

Davon habe ich bisher noch nicht gehört.

und Modbus, das ist ein Protokoll für SPS Hardware-Steuerungen.

Das ist mir allerdings ein Begriff.

Ich kriege von dem Hardware-Gerät einen "REAL" Wert (32 Bit, unsigned) als zwei einzelne 16 Bit Word Werte (Signed 0-65535) geliefert.

Nein. Die Fließkommaformate sind generell signed, deine beiden 16bit-Integers sind allerdings unsigned, wenn sie einen Wertebereich von 0..65535 haben. Das spielt aber hier auch keine Rolle.
Wer allerdings so eine blöde Schnittstelle entwirft, gehört eigentlich geohrfeigt, bis er lacht. Und dann nochmal, weil er lacht.

Die werden von dem Protokoll aufgeteilt und ich möchte die nun mit Node.JS wieder zusammensetzen. Der Javascript "number" Datentyp arbeitet intern auch mit 32 Bit.

Ja, schon richtig, aber ...

Ich hab es schon mit Bit-Operatoren versucht, in dem ich den ersten Wert um 16 Bit nach links verschoben habe und den zweiten dann rechts angehängt habe, aber das Ergebnis stimmt nicht mit dem richtigen Wert überein.

Nein, kann es auch nicht. Mit dem, was du beschreibst, könntest du wieder einen 32bit-Integer bekommen. Aber kein Fließkommaformat. In Javascript kannst du noch so schön mit Zahlenwerten jonglieren, aber Integer bleibt Integer, oder wird höchstens in Floating Point mit dem gleichen Zahlenwert umgewandelt.

Kurzum: Du kannst nicht byteweise oder bitweise auf das intern gespeicherte Format eines Fließkommawerts zugreifen - das wäre aber für eine solche Umwandlung notwendig. Du stehst vor einer Aufgabe, die meines Wissens in Javascript nicht lösbar ist.

So long,
 Martin

--
Computer funktionieren grundsätzlich nicht richtig.
Wenn doch, hast du etwas falsch gemacht.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(