in einem unsigned int auf d einzelnen Zahlen zugreifen



  • hy.

    hab folgendes problem:
    ich bekomme einen unsigned int, der verschiedenes enthalten kann. was er enthaelt steht im ersten byte, oder auch ersten 2 oder ... wie kann ich nun aus dem unsigned int *nur* die zahlen herausbekommen - parsen, also 1 byte, dann das naechste usw.?

    habe folgendes gefunden: http://www.wer-weiss-was.de/theme158/article1465192.html.
    jedoch gibts da ne Struktur, die ich net wirklich habe, leider.

    hoffe es kann mir jemand helfen

    mfg david



  • Du kannst den int per Bit-Operationen in seine Bestandteile zerlegen:

    unsigned int i=...;
    unsigned char b3 = i>>24,//höchstes Byte
                  b2 = i>>16,//zweites Byte
                  b1 = i>>8, //drittes Byte
                  b0 = i;    //unterstes Byte
    

    (alternativ könntest du den int auch per "reinterpret_cast<char*>(&i)" als char-Array uminterpretieren)



  • danke fuer d rasche antwort! 🙂
    also kann ich sozusagen auch auf die einzelnen bits zugreifen. das is super. wusste nicht, dass die bitoperatoren so maechtig sind.

    danke nochmal!



  • Ja, damit kannst du sogar einzelne Bits verarbeiten (wenn du unterhalb der Byte-Ebene arbeitest - mit "(i>>n)&1" erhältst du den Wert des n-ten Bits von i (n zwischen 0 und (idR) 31).



  • super. danke!



  • CStoll schrieb:

    Du kannst den int per Bit-Operationen in seine Bestandteile zerlegen:

    unsigned int i=...;
    unsigned char b3 = i>>24,//höchstes Byte
                  b2 = i>>16,//zweites Byte
                  b1 = i>>8, //drittes Byte
                  b0 = i;    //unterstes Byte
    

    (alternativ könntest du den int auch per "reinterpret_cast<char*>(&i)" als char-Array uminterpretieren)

    Fehlen da nicht noch jeweils die Masken ( &255), also z.B.

    b2 = (i>>16)& 255;
    

    ? Sonst waere ja das unterste Byte von i mit i identisch...?



  • tim_g schrieb:

    Fehlen da nicht noch jeweils die Masken ( &255), also z.B.

    b2 = (i>>16)& 255;
    

    ? Sonst waere ja das unterste Byte von i mit i identisch...?

    Wenn du willst, kannst du die einzelnen Werte noch mit "&255" oder "&0xFF" maskieren - aber da in einen Durchschnitts-Char sowieso nur 8 Bit reinpassen, fallen höherwertige Bits von selbst unter den Tisch.



  • ups, ja, habe den Typ von b[0123] uebersehen. Tschuldigung, bitte!


Anmelden zum Antworten