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 00

    extrahieren 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 verUNDen
    

    Bist 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.


Anmelden zum Antworten