LabVIEWForum.de - 6 stelligen Hex-String in Zahl konvertieren

LabVIEWForum.de

Normale Version: 6 stelligen Hex-String in Zahl konvertieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich hab folgendes Problem bei der Konvertierung eines 6 stelligen Hex-Strings in eine Zahl:

Meine Schrittmotorsteuerung liefert mir die aktuelle Position für jede Achse in Form eines 6 stelligen Hex-Strings (= 3 Byte), welcher in 2er Komplementdarstellung formatiert ist.

D.h. ich erhalte z.B. den String FFFF9C, welcher -100 darstellen soll. Das "Hex-String nach Zahl" Vi interpretiert diesen String jedoch als 4 Byte und liefert somit einen hohen positiven Wert, anstatt der -100.

Ich bin jetzt ziemlich ratlos wie das zu lösen ist O_o

Hoffentlich weis von euch jmd weiter (:

mfg

Andreas
Hab schnell was gebastelt...

Kann durchaus sein, dass es da einen eleganteren Weg gibt, aber so funktioniert es zumindest malWink

Lg Stefan
Oder so..
Hallo,

vielen Dank euch beiden für die schnelle Antwort.

Als ich die beiden Antworten heute morgen gelesen hab, war mit Lucki´s Variante direkt symphatisch. Bei näherem hinsehen wurde jedoch klar, dass die Sache zwar für das von mir gegebene beispiel FFFF9C den richtigen Werte liefert, jedoch nicht für größere negative Zahlen, wie z.B. 80 00 00. Grundhierfür ist wohl der Typecast auf 16bit Int - der Zahlenbereich muss jedoch mindestens 24 Bit umfassen.

Die Variante von oppossom lieferte jedoch das gleiche, falsche ergebnis. Ich konnte es jedoch so umbauen dass es jetzt funktioniert. DankeSmile

(Ich musste das Bool-Array zunächst auf 24 Werte kürzen, und dann vor dem x*2^n vi einen Typecast auf 32 bit einfügen, weil die Bool zu 0,1 Funktion einen 16 Bit Int liefert und das x*2^n VI dann ebenfalls auf 16 Bit beschränkt war)

Das geänderte VI gibts im Anhang

Gruß und Dank

Andreas
Ja, ich hatte nicht beachtet, daß es sich bei deinem 24 Bit Integer um ein Format handelt, welches es in LabVIEW gar nicht gibt. Also hier die korrigierte Fassung:
(Erläuterung: Wenn das MSB =1 ist, dann ist die Zahl negativ. Damit das MSB der 24bit-Zahl zum MSB einer 32bit-Zahl wird, multipliziere ich mit 256 und konvertiere von U32 nach I32. Dann mache ich die Multipklikation wieder rückkgängig)
hmm, erstaunlich (:

Das is ja nochmal ein gutes Stück kürzer, werd mir das nachher nochmal anguggen.

Thx.
Referenz-URLs