' schrieb:Ich hab mich da jetzt mal ein bisschen eingelesen aber verstehe trotzdem nicht warum in dem SubVi dieser C-Code verwendet wird.
Der Code macht aus jeweils vier Stück U8 ein Stück U32. Das U32 ist dann formatmäßig gesehen ein SGL.
Zitat:Im endeffekt werden da ja nur die einzelnen Bytes mit einer Oder MAskierung verglichen und dann auf die ausgangsvariable geschrieben. Aber ich verstehe nicht wieso?
Verglichen wird da nix. Da werden Bits verschoben und diese verschobenen Werte logisch verodert.
Es liegen ja aufgrund des Lesens von VISA nur Werte im Format U8 vor und zwar vier Stück pro Messgröße. Diese vier Stück müssen nun so verknüpft werden, dass der richtige Messwert herauskommt. Und das geht eben nun mal so wie hier programmiert: Der Exponent z.B. (das ist X4, X8 und X12) muss an die oberste Stelle einer Zahl. Und an die oberste Stelle kommt man, indem man die Zahl (z.B. X4) um 24 Bitpositionen verschiebt. Im Code "((x4 << 16) << 8)". Das ist mit (x4 << 24) identisch. "<<" ist C-Syntax und heißt "Bitweise schieben". Die anderen U8-Werte (also X1, X2 und X3) sind die Mantisse. Und auch diese drei U8-Werte müssen nun an die jeweils richtige Position geschoben werden. Die verschobenen Werte werden nun logisch veroder (ist das Zeichen "|". Das doppelte Zeichen "||" wäre ein boolsche Veroderung). Jetzt muss die entstandene Zahl nur noch von Format U32 in das SGL-Format umgewandelt werden - das geht mit der LV-Typkonvertierung.
Zum allgemeinen Aufbau einer SGL-Zahel siehe auch in WikiPedia unter Fließkommazahl.
Nachtrag:
In wie fern das dritte Bild (Mantisse.bmp) mit dem Code identisch ist, hab ich nciht überprüft. Ich gehe mal davon aus, das der Code richtig funktioniert.