LabVIEWForum.de - String zu Dezimal (1, 2 und 4 Byte) unsigned + Integer

LabVIEWForum.de

Normale Version: String zu Dezimal (1, 2 und 4 Byte) unsigned + Integer
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen

Ich suche eine Möglichkeit um einen Sting (je 3zeichen entsprechen 1Byte) zu zerlegen und als Zahl auszugeben.
So sollte z.B. ein String der so aussieht 255255255255 in seine einzelnen Bytezeichen zerlegt werden 255 255 255 255 = FF FF FF FF = 4294967295 oder 255 255 = FF FF = 65535..
Gibt es dafür eine Funktion oder ein fertiges vi oder kennt jemand eine Möglichkeit und kann mir auf die Sprünge helfen?
(15.07.2015 21:21 )hansi9990 schrieb: [ -> ]Gibt es dafür eine Funktion oder ein fertiges vi oder kennt jemand eine Möglichkeit und kann mir auf die Sprünge helfen?

Ich fürchte, das wirst du selbst programmieren müssen. Du müsstest dir jeweils 3 Zeichen abspalten und diese in ein Byte wandeln. Dann verknüpfst du die Bytes mit der Byteverknüpfungsfunktion bis zu einer 32 Bitzahl.

Gruß, Marko
Hallo Hansi,

Zitat:ein String der so aussieht 255255255255 in seine einzelnen Bytezeichen zerlegt
Oh die Wunder der Formatstrings:
[attachment=53628]

Achja, eine Idee zum zweiten Teil der Frage:
[attachment=53629]
Danke für den Input. Wink
Es hat sich ergeben das ich den ersten Teil nicht mehr benötige da ich jetzt mit einem U8 Zahlen Array arbeiten kann.
Zum zweiten Teil habe noch ein Anliegen, kann man irgendwie die Max Bytelänge des am Typumwandler angelegten Referenz-Datentyp herausfinden (U8 und I8 = 1 U16 und I16 = 2 U32 und I32 = 4)?
Ich möchte je nach Datentyp die Länge im Array ausschneiden, ich habe es so wie im Anhang versucht aber das funktioniert so nicht.
Hat jemand eine Idee wie ich das machen könnte?
Hallo hansi,

Zitat:Ich möchte je nach Datentyp die Länge im Array ausschneiden, ich habe es so wie im Anhang versucht aber das funktioniert so nicht.
Und warum nicht? Weil in deinem BD einige CoercionDots zu sehen sind!

Mögliche Lösung: erstelle für jeden Datentyp einen Case. Im Case holst du die Bytes aus dem Array und wandelst die Daten um. Dann wandelst du den so erzeugten Datentyp in den größtmöglichen/größt-genutzten um und gibst ihn aus dem Case aus.

Warum? Weil LabVIEW streng typisierte Drähte verwendet! Du kannst dank THINK DATAFLOW nicht verschiedene Datentype über ein und denselben Draht laufen lassen! (Wenn man Variant, was hie rnicht hilft, außer acht lässt.)
Hallo Gerd

Danke.

Ich habe jetzt 6 einzelne VI's (I8,I16,I32,U8,U16 und U32) ohne Case Struktur erstellt, den Ausgang habe ich auf "an Quelle anpassen" gesetzt und daraus dann ein Polymorphes Vi gemacht, das funktioniert auch.
Hallo hansi,

Zitat:das funktioniert auch.
Wenn es hinterher über einen Draht weitergehen soll, dann musst du um das polymorphe VI herum eine Casestruktur bauen und auf den größten Datentyp coercen…
?? Sorry, verstehe nicht was du damit meinst.
So wie im Bild dargestellt soll es dann weitergehen (in dem subVI "Byte Array Converter" versteckt sich das Polymorphe VI.)
Hallo hansi,

Zitat:in dem subVI "Byte Array Converter" versteckt sich das Polymorphe VI.
Ist das das polymorphe VI oder ist dieses darin enthalten?
Fakt ist, dass du hier immer den gleichen Datentyp herausbekommst, wie oben schon mehrfach geschrieben!
Nein, ich komme nicht mit dem gleichen Datentyp heraus.
Ich habe es gerade probiert, der Datentyp am Ausgang passt sich am Datentyp an der oben unter "Typ" vorgegeben wird. Es ist natürlich Voraussetzung das am VI ein Element mit den benötigten Typ angeschlossen wird.
Das liegt wohl daran das ich bei allen subVI's das Anzeigeelement (in meinem Bild mit "Wert" bezeichnet) auf "An Quelle anpassen" gesetzt habe.
Habe das Polymorphe VI mal angehängt.
Ups sorry, dazu werden natürlich auch die subVI's benötigt. Wink
Das auch noch.
Referenz-URLs