LabVIEWForum.de
Datenstring in Fließkommazahl - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Datenstring in Fließkommazahl (/Thread-Datenstring-in-Fliesskommazahl)



Datenstring in Fließkommazahl - Bernhard_ - 13.07.2006 18:00

Hallo liebes Forum,

Über RS232 kommt ein Datenstring an, in dem (MSB zuerst) die vier Bytes einer 32-Bit Fließkommazahl enthalten sind. Der Wert dieser Zahl soll als ASCII-String dargestellt werden.

Dazu habe ich den betreffenden Teilstring mit "String in Daten konvertieren " in eine 32-Bit Fließkommazahl konvertiert und dann mit "Zahl nach String (Fließkommadarstellung)" in einen String gewandelt.
Leider ist das Ergebnis NaN.

Wäre klasse, wenn mir jemand den Fehler in meiner Vorgehensweise oder die Korrekte Lösung nennen könnte.

Vielen Dank im Voraus und viele Grüße,
Bernhard


Datenstring in Fließkommazahl - kokisan2000 - 14.07.2006 01:12

Hallo Bernhard,

NaN bedeutet bei 4 Byte Gleitkommazahlen nach IEEE, dass die Zahl ausserhalb des darstellenden Bereiches zwischen 1.175E-38 und 3.403e38 liegt. Im Standardformat nach IEEE4 ist die Bitverteilung wie folgt:

v:1|e:8|m:23

wobei v das Vorzeichen, e den Exponenten und m die Mantisse beschreibt.
Die Zahl berechnet sich dann zu:

wenn 0<e<255 : x = (-1)^v * 1.m * 2^(e-127)

1.m bedeutet 1+m/2^23

Soweit die Theorie ;-)

Mit dieser Formel kann man den ankommenden Datenstring entsprechend zerlegen und die Zahl einzeln zusammenbauen. Wie das geht, schicke ich im Beispiel mit. In Deinem Fall mußt Du dann nur noch den ankommenden Datenstring entsprechend obiger Bitfelder zerlegen.

Mag sein, dass es eine elegantere Lösung gibt, .....Ich lerne immer gerne dazu ;-)

Gruß
kokisan2000


Datenstring in Fließkommazahl - Bernhard_ - 14.07.2006 09:24

Hallo kokisan2000,

vielen Dank für dein anschauliches Beispiel.
Aus dem String konnte ich ein Byte-Array und daraus eine 32-bit Integer machen und daraus mit "Zahl nach boolesches Array" ein Bitfeld. Und dieses Array wird dann in drei Stücke geteilt.
Aber es muss doch eine Möglichkeit geben, die ankommenden 4 Bytes abzulegen und als Float zu interpretieren.
Trotzdem nochmal dankeschön, jetzt habe ich zumindest mal eine funktionierende Lösung.

Viele Grüße,
Bernhard