LabVIEWForum.de
4Byte Datenstrang aufteilen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: 4Byte Datenstrang aufteilen (/Thread-4Byte-Datenstrang-aufteilen)

Seiten: 1 2


4Byte Datenstrang aufteilen - RoLe - 05.03.2009 10:24

Von mir auch noch ein Beispiel, da du ev. ja am ende die einzelnen Bit der U8 wissen möchtest.
(in dem Fall kannst du die For-Schleife löschen)

In meinem Bsp. entsprechen die Indexe des Array dem Byte1-4.
Bei den gezeigten Bsp. mit dem "Split Number" ist Byte 0 das unterste. (index3 des U8 Array)
Kein Problem, aber man muss es wissenWink

...oder man kann es so machen, dann gibt es keine Kreuzungen beim verbinden.


4Byte Datenstrang aufteilen - Schandmaul - 05.03.2009 14:26

Halli hallo,
ich bins mal wieder ^_^.

Ich hatte mich schon mal gemeldet wegen einer 4 Byte Geschichte,
ich glaube ich muss das Thema mal komplett schildern, ich habe nämlich keine Ahnung Rolleyes,
wie ich das ganze bewerkstelligen soll.

Also, die Aufgabenstellung ist folgende:

Ich muss einen 32- bit (4Byte) Datenstrang in einen 40- bit (5Byte) Datenstrang konvertieren, das tolle daran ist,
dass das LSB der letzten 4Bytes des 5Byte Datenstranges 0 sein muss, das 1. Byte hat das LSB 1.
Nun ist das Problem, dass ich von bit 0 beginnend bis bit 31 die Daten von Byte 5 bis Byte 1 durchschieben muss (je das letzte),
aber ohne das jeweilige LSB zu beeinflussen.
Ich habe mir dazu mal ein Beispiel überlegt:
z.B.
32- bit Anfangsstrang:
10111111 10000000 11111111 11000000

dieser soll am Ende so aussehen:
1011XYZ1 11111000 00000110 11111110 10000000

- XYZ steh hier für einen Kanal, den ich variabel anlegen kann.
- das erste Byte hat das LSB1, die anderen das LSB0

d.h. dass ich beim schieben von Byte 5 auf Byte 4 quasi dass LSB auslassen muss und direkt auf
das zweite bit den Übertrag von Byte 5 schreiben muss usw.

Ich bin damit gerade völlig überfordert,
vielleicht blockiert mein Hirn auch nur, weil ich da schon seit 2 Tagen dransitze.

Bin über jede Antwort dankbar.

Gruß
Flo


4Byte Datenstrang aufteilen - jg - 05.03.2009 14:49

Jetzt würde ich mit Boolean-Array (so wie schon von TSchAC vorgeschlagen) arbeiten.

Bsp:
[attachment=17049]

Gruß, Jens

P.S.: Ich habe mal die beiden Threads zusammengehängt, ist ja im Prinzip noch dieselbe Frage.


4Byte Datenstrang aufteilen - Schandmaul - 05.03.2009 16:05

Jens, du bist a SchauBig Grin.

Danke


4Byte Datenstrang aufteilen - jg - 05.03.2009 16:16

Solange das kein Gergovia-Dialekt ist (vgl. Asterix im Avernerland), nehme ich das Lob gerne an. Big Grin


4Byte Datenstrang aufteilen - Schandmaul - 05.03.2009 16:50

Naa iwo, des is barisch und hoast so fui wia, du bischd super.


4Byte Datenstrang aufteilen - Lucki - 05.03.2009 17:34

' schrieb:Jens, du bist a SchauBig Grin.
Kann dem nur zustimmen, vor allem wegen seiner Intuition. Was ist ein "Datenstrang"? Ist damit ein String gemeint oder eine ganz normale Zahl? Wie werden die Bytes gezählt? Beginnend mit 0 oder mit 1? Von links oder von rechts gezählt? Es ist alles nicht klar gesagt.
Falls am Schluß wieder ein "Datenstrang" herauskommen soll, entweder as String oder als U64-Zahl, dann würde, ausgehend vom Ergebnis von Jens, die weitere Lösung so aussehen:
[attachment=17053]


4Byte Datenstrang aufteilen - rolfk - 06.03.2009 07:41

' schrieb:@Torsten (ohne h)Big Grin: Wenn du damit meinst, um eine U32 auf 4 U8 aufzuteilen, ja, dazu braucht man 3x dieses VI.

Gruß, Jens

Oder ganz einfach ein Typecast in ein Byte Array. Dann hat man zwar das Problem das LabVIEW immer von Big Endian Daten ausgeht auf der Streamseite so dass die Bytes im Array im Prinzip geswapt sind im Vergleich was man auf einer Intel x86 Maschine erwartet.

Das kann man in neueren LabVIEW Versionen durch Verwendung der Flatten Funktion umgehen da man dort die Endianess der Konversion angeben kann. Bei alten LabVIEW Versionen musste man auf der nicht Streamseite (also hier wo der int32 angeschlossen ist) noch die Swap Bytes und Swap Words Funktionen gebrauchen. Hier wo Du die einzelenen Bytes des int32 mittels Index Array herausholen willst ist die Standardisierung auf Big Endian aber sogar ein Vorteil. Auch wenn Du das VI mal auf einer nicht Intel Maschine laufen lässt (frühere PPC Macs, oder aktuel PPC RT Systeme wie etwa CompactRIO) bleibt der Index für das Lowest Significant Byte (LSB) des int32 immer 3.

Zu Beruhigung auch die Split Number Funktion arbeitet auf allen Architekturen gleich da die Hi, Lo Definition sich auf die Hälftenwertigkeit des Eingangsintegers bezieht und nicht etwa auf die Adressposition der Hälften im Speicher.

Rolf Kalbermatter