C-Strukturen mit verschieden langen Elementen... - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: DLL & externer Code (/Forum-DLL-externer-Code) +---- Thema: C-Strukturen mit verschieden langen Elementen... (/Thread-C-Strukturen-mit-verschieden-langen-Elementen) |
C-Strukturen mit verschieden langen Elementen... - astraios - 23.03.2007 16:05 Hallo, jetzt hab ich's endlich geschafft, an die C-Struktur Daten meiner DLL ranzukommen - da kommt gleich das nächste Problem auf mich zu: Ich habe u.a. Strukturen, deren Deklaration ungefähr so aussieht (mit uint sind unsigned 32 Bit Integer gemeint): <div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>typedef struct myStruct { uint value1 : 11; uint value2 : 7; uint value3; uint value4: 1; } myStruct;</div> Jetzt sind meine Kenntnisse über C-Strukturen nicht die vollständigsten, aber ich schätze mal, dass "uint value1 : 11;" bedeutet, dass aus dem Speicher 11 bit gelesen werden und in einem 32 Bit uint landen usw. Demnach hätte diese Struktur eine Größe von 11+7+32+1 = 51 Bit (durch 8 = 6,375 ~ 7 Byte). Stimmt das so? Und wenn ja, wie kann ich die Daten möglichst effektiv da rausholen? Aus der DLL hol ich die Daten in einem U8-Array raus. Ich habs schon so versucht, dass ich aus dem U8 Array ein Bool-Array gebastelt habe: [attachment=5894] und dann hol ich mir daraus die einzelnen Werte mit diesem Code: [attachment=5895] Jetzt ist mir zum einen die Taktik mit der For-Schleife zu langsam (ich muss eine ziemlich große Datenmenge pro Sekunde verarbeiten) und zum anderen bin ich mir nicht ganz sicher, ob die Bits auch alle in der richtigen Reihenfolge stehen, damit auch die richtigen U32 Werte herauskommen (bei meinem Programm kommen bisweilen nämlich teilweise ziemlich merkwürdige Daten raus - vor allem bei den Werten, die aus mehr als 8 Bit erstellt werden). Ich hoffe, dass mir auch bei diesem Thema noch zu helfen ist... Vielen Dank schonmal im Voraus! Viele Grüße und ein schönes Wochenende, Robert C-Strukturen mit verschieden langen Elementen... - IchSelbst - 23.03.2007 17:31 ' schrieb:aber ich schätze mal, dass "uint value1 : 11;" bedeutet, dass aus dem Speicher 11 bit gelesen werdenDas sagt auch meine Beschreibung von struct so. Zitat:Demnach hätte diese Struktur eine Größe von 11+7+32+1 = 51 Bit (durch 8 = 6,375 ~ 7 Byte).Dem, dass es also 7 Byte sind, würde ich jetzt nicht so zustimmen. ":11" und ":7" sind bitcodiert, also in einem Wert = 1xunit. Danach ein normaler uint, macht 2xuinit. Dann wieder ein bitcodiertes, insgesamt also 3*unit. Bei 32 Bit pro uint also 12 Bytes. Zitat:Jetzt ist mir zum einen die Taktik mit der For-Schleife zu langsam (ich muss eine ziemlich große Datenmenge pro Sekunde verarbeiten)Warum machst du es nicht so, wie dus hier (Bild Beitrag#6) gezeigt hast. Ich würde die Daten quasi manuell konvertieren: "Bool1 = ((Value & Const)!=0);" bzw. "Int = ((Value & Const) << X);" etc. Das könnte bei wenigen Daten pro Datensatz effektiver sein, als mit Arrays zu hantieren. Einmal Array teilen kostet garaniert mehr Zeit als 20 Rechenoperationen. C-Strukturen mit verschieden langen Elementen... - astraios - 26.03.2007 11:22 Danke für die Antwort! So scheint es zu klappen! Ich hol die ganzen Werte mit Bit-Angaben jeweils aus demselben uint raus. Und wenn der nächste Wert nicht mehr rein passt, beginne ich ein neues uint. Super! Danke auch für den Tipp mit (Value&Const != 0) usw.! Macht die Sache um Größenordnungen schneller! Viele Grüße Robert |