2012-02-04 13 views
5

studiowałem kodu open source, gdzie natknąłem się na następujący wierszJak przekonwertować char na bajt?

stringBytes[i] = (byte) (stringChars[i] & 0x00FF); 

Może ktoś wyjaśnić, co się rzeczywiście dzieje w tej linii ???

+2

'& 0x00FF' jest zbędne. –

Odpowiedz

9

Char składa się z 2 bajtów w Javie i oczywiście bajt jest jeden bajt.

Tak więc w tej operacji:

stringBytes[i] = (byte) stringChars[i] & 0x00FF 

Wartość znak (16 bity) są binarny AND o numerze 0x00FF (binarne 0000 0000 1111 1111), tak aby jeden bajt.

Przez binarne ANDING z 8 0s and 8 1s jesteś w zasadzie maskowania 8 lewych najbardziej lub najbardziej znaczących bitów (MSB) wartości char, pozostawiając tylko 8 prawych większości lub najmniej znaczących bitów (LSB) w stanie nienaruszonym. Następnie kod przypisuje wartości wynikowe do bajtu za pomocą odlania (byte), która w przeciwnym razie jest wartością int.

+1

Ukrywasz 8 LEWEJ większości bitów i zachowujesz PRAWDZIWY najwięcej bitów. Za pomocą operatora i, zer w LEWEJ części maski wymuszają wynik na zero. – Tony

+0

Dzięki, że to był dobry połów. Poprawiłem to teraz. – anubhava

2

ANDING z 0x00FF zachowuje tylko ostatnie 8 znaczących bitów i zer innych bitów.

E.g.: 
0xD2A5 & 0x00FF = 1101001010100101 & 0000000011111111 = 0000000010100101 = A5 
+0

Jestem pewien, że A5 powinien naprawdę być 0xA5 - tylko ze względu na konsystencję. – Chexxor

Powiązane problemy