Doppelpunkt bei Membervariablen-Definition



  • Tag zusammen. Damit ich nicht immer den Kollegen von spieleprogrammierer.de mit allgemeinen C++ Fragen auf die Nerven geh, hab ich mich mal hier angemeldet. Ich denke ich werde in naechster Zeit oefters hier vorbeischauen und bin auf jeden Fall fuer jegliche Hilfe dankbar 🙂

    So, zur eigentlichen Frage: Ich arbeite mich gerade durch Winsock-Tutorials und mir ist eine struct-Definition aufgefallen die mir irgendwie entgangen sein muss:

    typedef struct
    {
     unsigned int h_len:4;		// length of the header in DWORD
     char szAdditionalData[23];
    } IPHeader;
    

    Aus dem Titel zu erahnen verwirrt mich das h_len:4. Meine erste Vermutung war, dass es sich hierbei um eine Art "Offset" handeln muss, da die Laenge des IP-Headers nicht im 0. bis 4. Byte steht.
    Kann mir das jemand genauer erklaeren ?



  • Das legt die Anzahl der Bits der Variable fest.
    Google: bitfields und/oder Forensuche.



  • Aha, danke!
    Es macht also keinen Unterschied ob ich schreibe:
    unsigned int number:4;
    bzw
    unsigned short number:4;
    oder sogar bloss
    byte number:4;
    Ist der Datentyp also trivial, da so oder so nach 4 Bits "abgeschnitten" wird ?
    Und noch eine Verstaendnissfrage:
    Kann ein signed int das auf 4 Bits 'gestutzt' wurde
    > Werte von 0 bis 15 annehmen ODER
    > Werte von -8 bis 7 annehmen ?

    EDIT: Ok, ich hab einen Artikel gefunden der's ganz gut erklaert.


Anmelden zum Antworten