BYTE als Binär Wert behandeln und bestimet Bits entnehmen??
-
Hallo ihr,
habe folgendes:typedef unsigned char BYTE;
BYTE scr= 0; // irgend ein WErt zwischen 0 und 63
BYTE a,b,c,d;gesehnen Binär:
00000000
splitten in 2er reihen:
00 00 00 00extrahieren in 4 Komponenten:
a= 00;
b= 00;
c= 00;
d= 00;ergebnis sollte dann sein das alles vier werte a-d 0 ausgeben!
Wie geht das??
-
mmh. Teste doch einfach, ob die Bits gesetzt sind, und schreibe demnach deinen Array voll. Müsste z.B. so gehen (NICHT GETESTET!)
unsigned char c=...; char ac[9]; for(int i=0;i<8;i++) { if(c & (1<<i)) { ac[7-i]='1'; } else { ac[7-i]='0'; } } ac[8]='\0';
-
Danke für deine Tip!! habs nun so gemacht.. so blöd bin ich gar net:)
short bin= (short)iNr; // buf BYTE R=0; BYTE G=0; BYTE B=0; // filter BYTE RF=0x30; // 00110000 BYTE GF=0x0C; // 00001100 BYTE BF=0x03; // 00000011 // Splitten R= (bin & RF); // 5 u 6 Bit extrahiren und 4 nach rechts veschieben R=R>>4; G= (bin & GF); // 3 u 4 Bit extrahiren und 4 nach rechts veschieben G=G>>2; B= (bin & BF); // 1 u 2 Bit extrahiren und 4 nach rechts veschieben // 8Bit wert herstellen (erst verschieben dann verUNDen) R= R<<6; G= G<<6; B= B<<6; R=R | 0x3F; // mit 00111111 verUNDen G=G | 0x3F; // mit 00111111 verUNDen B=B | 0x3F; // mit 00111111 verUNDen
-
BorisDieKlinge schrieb:
// 8Bit wert herstellen (erst verschieben dann verUNDen) R= R<<6; G= G<<6; B= B<<6; R=R | 0x3F; // mit 00111111 verUNDen G=G | 0x3F; // mit 00111111 verUNDen B=B | 0x3F; // mit 00111111 verUNDenBist du sicher, dass du das willst (mal davon abgesehen, dass | ein oder ist)?
Wenn eine deiner 2-Bit Werte zum Beispiel 11 ist (dez -> 4) und du schiebst das 6 mal nach links steht dann 192 drin.