Moin moin,
ich sitze hier vor einem Problem und komme einfach nicht zur Lösung. Und zwar habe ich folgendes Problem:
Ich habe 4 Werte (Helligkeit, Rot, Grün und Blau), z.B. so: 0, 234, 12, 67. Binär sieht das ganze ja so aus (es werden von 32 Bit immer nur die ersten 8 genutzt):
0000 0000 -> 0
1110 1010 -> 234
0000 1100 -> 12
0100 0011 -> 67
Nun muss ich das ganze Bit für Bit durchgehen (angefangen beim höchsten) und das immer nach unten hin gruppieren, damit dann die folgende Bitfolge daraus wird:
0100 0101 0100 0000 0110 0010 0101 0001
Mein bisheriger Ansatz sah wie folgt aus:
- Ich laufe von 7 ab runter bis einschließlich 0
- Zusammenschieben der Bitfolge anhand des aktuellen Durchlaufs
for(int i = 7; i >= 0; i--)
{
int brightness, red, green, blue;
int pos = 0;
// get values
brightness = 0;
red = 234;
green = 12;
blue = 67;
// Bit abhängig von der aktuellen Position holen
// - Bit um i Stellen nach vorne schieben (>> i)
// - Bit ganz nach vorne schieben (>> (7 - i))
// - Überflüssige Daten wegschmeißen (&0x01)
// - Bit an die korrekte Position schieben.
pos |= ((((brightness >> i) >> (7 - i)) & 0x01) << 3);
pos |= ((((red >> i) >> (7 - i)) & 0x01) << 2);
pos |= ((((green >> i)>> (7 - i)) & 0x01) << 1);
pos |= ((((blue >> i) >> (7 - i)) & 0x01) << 0);
// Weitere basteleien mit der Position
}
Wenn meine Beispielwerte nicht gänzlich falsch sind, sollte ja beim 2. Durchlauf (i = 6) pos den Wert 5 haben, allerdings ist dem nicht so.
Ich bin das ganze auch schon mit dem Debugger durchgegangen, und deswegen weiß ich, dass das letzte Bit (blau) irgendwie verloren geht.
Könnt ihr mir da vielleicht weiter helfen?
Grüße Christian