Mehrere Strukturen in ein char-feld
-
Hi,
ich hab ein char-array:
char pm_msg[ sizeof(struct hdr1) + sizeof(struct hdr2) + sizeof(struct payload) ];In dieses Feld sollen hintereinander der Inhalt von den 3 Strukturriablen der Typen hdr1, hdr2, payload.
Hab mir 2 Sachen überlegt, kann sie aber leider grade nicht ausprobieren.
char pm_msg[ sizeof(struct hdr1) + sizeof(struct hdr2) + sizeof(struct payload) ];
struct hdr1 hdr_1;
struct hdr2 hdr_2;
struct payload p;char* src;
char* dst;//Lösung 1
pm_msg[0] = hdr_1;
pm_msg[ sizeof(struct hdr1) ] = hdr_2;
pm_msg[ sizeof(struct hdr1) + sizeof(struct hdr2) ] = p;// Lösung 2
src = (char*)&hdr_1;
dst = (char*)&pm_msg[0];
memcpy(src, dst, sizeof(struct hdr1));src = (char*)&hdr_2;
dst = (char*)&pm_msg[sizeof( struct hdr1)];
memcpy(src, dst, sizeof(struct hdr2));src = (char*)&p;
dst = (char*)&pm_msg[sizeof(struct hdr1) + sizeof(struct hdr2)];
memcpy(src, dst, sizeof(struct payload));Würde das ganze funzen, vorallem Lösung 1, da die schön einfach ist??
mfg
tie
-
Würde mich wundern wenn Lösung 1 durch den Compiler ginge.
Lösung 2 sieht auf Anhieb nicht schlecht aus.
-
Lösung 2 ein bisschen kürzer (hoffe das geht in ANSI C so wie in C++):
char* cTemp = pm_msg; memcpy (cTemp, (char*)&hdr_1, sizeof (struct hdr1)); cTemp += sizeof (struct hdr1); memcpy (cTemp, (char*)&hdr_2, sizeof (struct hdr2)); cTemp += sizeof (struct hdr2); memcpy (cTemp, (char*)&p, sizeof (struct payload));
Im Übrigen hat memcpy als ersten Parameter das Ziel, dann die Quelle - nicht umgekehrt.
-
dank euch, hab meine lösung 2 mit richtiger reihenfolge bei dst und src genommen