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!