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 ???
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 ???
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
.
ANDING z 0x00FF zachowuje tylko ostatnie 8 znaczących bitów i zer innych bitów.
E.g.:
0xD2A5 & 0x00FF = 1101001010100101 & 0000000011111111 = 0000000010100101 = A5
Jestem pewien, że A5 powinien naprawdę być 0xA5 - tylko ze względu na konsystencję. – Chexxor
'& 0x00FF' jest zbędne. –