INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

C-Strukturen mit verschieden langen Elementen...



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

23.03.2007, 16:05
Beitrag #1

astraios Offline
LVF-Grünschnabel
*


Beiträge: 44
Registriert seit: Mar 2006

8.5
2006
de

80937
Deutschland
C-Strukturen mit verschieden langen Elementen...
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:

   

und dann hol ich mir daraus die einzelnen Werte mit diesem Code:

   

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... Rolleyes


Vielen Dank schonmal im Voraus!

Viele Grüße und ein schönes Wochenende,

Robert

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.03.2007, 17:31
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.696
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
C-Strukturen mit verschieden langen Elementen...
' schrieb:aber ich schätze mal, dass "uint value1 : 11;" bedeutet, dass aus dem Speicher 11 bit gelesen werden
Das 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.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.03.2007, 11:22
Beitrag #3

astraios Offline
LVF-Grünschnabel
*


Beiträge: 44
Registriert seit: Mar 2006

8.5
2006
de

80937
Deutschland
C-Strukturen mit verschieden langen Elementen...
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!

Big Grin

Viele Grüße

Robert

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: