Wert in Matrix ablegen



  • Hallo ich möchte eine 32 bit Wert in einzelne 2 bit Werte aufsplitten und diese in einer 4 x 4 Matrix ablegen.
    Das ganze hab ich wie flogt aufgebaut:

    struct a{int zahl:2,};
    struct b{a senkrecht[4]};
    struct c{b waagrecht[4]};

    Jetzt meine Frage wie kann ich hier nun so einfach wie möglich ein 32 bit Wert ablegen ohne groß zu maskieren?



  • struct a{unsigned zahl:2};
    struct b{struct a senkrecht[4]};
    struct c{struct b waagrecht[4]};
    
    struct c c;
    unsigned a[16],i=16;
    uint32_t u=0x01020304;
    while( i-- )
      a[i]=u&3, u>>=2;
    
    c=*(struct c*)a;
    


  • Wow super das ganze funktioniert.Hab es gleich umgesetzt.
    Kannst du mir noch erklären wie es geht?
    Verstehe das mit den Pointern noch nicht so ganz.



  • Also erstmal sparst du mit diesem Bitfeld keinen Speicherplatz, wie du vielleicht vermuten würdest, der Compiler kann nur minimal 1 Byte definieren.
    Deshalb hat deine Gesamtstruktur eine gleichgroße Speicherbelegung wie ein Array desselben Typs.
    Die Schlußanweisung nutzt die Strukturinhaltskopie bei der Zuweisung von Strukturen, d.h. eine Strukturzuweisung kopiert den Inhalt des Speicherbereiches der Struktur.
    Der Compiler wird angewiesen, a als Struktur anzusehen und die o.g. Kopie durchzuführen, entspricht also

    memcpy(&c,a,sizeof a);
    


  • Ok super eine letzte frage noch.Wenn ich jetzt bestimmte Elemente auslesen möchte um sie auf ihre Werte zu prüfen wie würde ich das noch machen?Sorry das ich so viel frage aber ich programmiere erst seit einem halben jahr und hier bei meinem Praktikum bekomme ich leider nicht viel erklärt.



  • Du definierst eine Struktur und weißt nicht wie mal darauf zugreift?
    Mann mann, das gibt mir zu denken.
    Auf Strukturelemente greift man mit '.' zu, auf Elemente von Strukturzeigern mit '->', also z.B.

    c.waagrecht[0].senkrecht[0].zahl
    c.waagrecht[0].senkrecht[1].zahl
    ...
    

    Indexe bei Arrays sind nullbasiert.



  • struct a{unsigned zahl:2};
    

    Das kannte ich gar nicht, was bedeutet das bzw. wie ist das Google-Suchwort für diesen Typ? (:2)



  • earli schrieb:

    Das kannte ich gar nicht, was bedeutet das bzw. wie ist das Google-Suchwort für diesen Typ? (:2)

    Ja: Das Stichwort lautet "Bitfeld" (aber als einziges Struct-Element ist das selten).


Log in to reply