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 🙄


Anmelden zum Antworten