2016-05-04 16 views
0

Verschiebung habe ich ein IntegerExtract Unter hex von Int mit nur

int RBGcolor = 0xAA3080; //R = AA, G = 30, B = 80 

und ich möchte den 0x30 Teil extrahieren, so sollte das Ergebnis sein int Output = 0x30;

Wie kann ich dies nur mit Verschiebung? Ich dachte an etwas wie

int Output = RBGcolor>>2<<2; 

Antwort

2

Hexadezimal ist nur eine Zeichenfolge Darstellung.
Ein int ist immer noch 4 Bytes. Die dritte Byte bildet den G Teil:

xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx 
    A  R  G  B 

Neben R, G & B, eine Farbe hat auch eine A genannt Alpha-Komponente, die Transparenz anzeigt.

Es gibt verschiedene Möglichkeiten, um die verschiedenen Teile zu isolieren:

(RGBColor << 8) >> 24 or (RGBColor >> 16) & 0xFF 

die R isolieren

(RGBColor << 16) >> 24 or (RGBColor >> 8) & 0xFF 

das G

(RGBColor << 24) >> 24 or RGBColor & 0xFF 

wird isolieren die B

isolieren

Hier ist ein funktionierendes Beispiel: Sie haben uint

uint RGB = 0xAA3080; 

uint R = RGB <<8>> 24; //170 
uint G = RGB <<16>> 24; //48 
uint B = RGB <<24>> 24; //128 
+0

sind Sie sicher über R benutzen? es ist -128 in meinem Fall – Byyo

+0

Wenn das erste Bit 1 ist, wird die rechte Verschiebung alle verschobenen Bits mit 1 füllen. Ich denke '(RGBColor >> 16) & 0xFF' ist die bessere Option. Es wird funktionieren wie es soll. –