Wie bekomme ich Elemente aus dem Paket
-
Hallo zusammen,
ich bins mal wieder.
Ich habe folgende Paket Struktur:
typedef struct Header { uint8_t op; uint8_t fragment; uint8_t id; uint8_t length; } Header; typedef struct PDU { uint8_t header[sizeof(Header)]; uint8_t data[100]; } PDU;
Nun habe ich eine Methode, welche mir eine void* auf PDU gibt. Ich will also dies in eine PDU casten, den Header rauslösen und die Elemente abfragen. Allerdings bekomme ich die völlig falschen Ergebnisse, so wie ich es jetzt mache:
void handlePDU(void *buf){ PDU* message = (PDU*) buf; Header header; memcpy(&header, message->header, sizeof(header)); [...]
Leider kommt da quatsch raus. Außerdem kann man glaube ich auf das memcpy überaupt verzichten und einfach die Pointer umbiegen. Aber wie? Ich komm nicht drauf.
Schon mal Dank.
uwe
-
der header in deiner struct PDU ist *sizeof(Header)sizeof(Header) gross. ist das so gewollt?
wenn nicht:typedef struct PDU { uint8_t header; // <<-- kein array uint8_t data[100]; } PDU;
oder, am besten du nimmt gleich ein array aus 104 uint8_t's statt der struct.
-
Hi,
erst mal Dank für die schnelle Antwort. Da ist wohl ein Fehler. Also nochmal:
typedef struct AHeader { uint8_t op; uint8_t fragment; uint8_t id; uint8_t length; } Header; typedef struct PDU { uint8_t header[sizeof(Header)]; uint8_t data[100]; } PDU;
so ist es definiert. Also die Struktur ist so vorgegeben (hier mal gekürzt wiedergegeben), kann ich also so ohne weiters nicht ändern. Mal fragen evtl.Auf jeden Fall soll es eine Struct sein und kein reines Array. Noch einen Tip so?
Oder muß ich doch mal wegen der Änderung fragen?
mfg und danke.
-
äääh nee, ich hab' mist geschrieben. vergiss es. das ist ja ein uint8-array von der grösse des headers, dann passt es doch.
-
Warum machst du es nicht so:
typedef struct PDU { Header header; uint8_t data[100]; } PDU;