Alignment von Datenstrukturen



  • Ich habe folgendes Problem:

    Ich habe eine Klasse:

    class foo
    {
        char a;
        short b;
        ...
    };
    

    und ein char-Array mit Daten aus einer Datei.
    In der Datei sind die Daten ohne besondere Ausrichtung,
    versuche ich jetzt, über die Klasse auf die Daten zuzugreifen,
    gibt es einen Fehler:

    foo *a=(foo *)&data[100];
    cout<<int(a->a); //kein Problem
    cout<<a->b;      //die Daten sind um ein Byte verschoben
    

    Gibt es eine Möglichkeit, die Ausrichtung so zu ändern, dass das funktioniert?
    (Und zwar ohne char-Array anstatt dem short)

    Und wie weise ich einem short am besten den Wert aus einem char-Array zu?

    char foo[]={10,20};
    
    short a=*(short *)&foo[0];   //funktioniert
    short a=foo[0]*0x100+foo[1]; //funktioniert
    ahort a=(short)foo[0];       //funktioniert nicht, a=10
    


  • Problem gelößt

    __attribute__ ((packed))
    

    ist mein Freund 😃


Anmelden zum Antworten