Как преобразовать символ в байт? - PullRequest
5 голосов
/ 04 февраля 2012

Я изучал открытый исходный код, где наткнулся на следующую строку

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

Может кто-нибудь объяснить, что на самом деле происходит в этой строке ???

Ответы [ 2 ]

10 голосов
/ 04 февраля 2012

Char состоит из 2 байтов в Java и, конечно, байта является одним байтом.

Итак, в этой операции:

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

Значение символа (16 битов) представляет собой двоичное значение ANDED с номером 0x00FF (двоичное значение: 0000 0000 1111 1111), чтобы сделать его одним байтом.

Путем двоичного ANDING с 8 0s and 8 1s вы в основном маскируете 8 левых старших или старших значащих бит (MSB) от значения символа, таким образом оставляя только 8 правых старших или младших значащих бит (LSB) без изменений. Затем код присваивает результирующие значения байту, используя приведение (byte), которое в противном случае является значением int.

2 голосов
/ 04 февраля 2012

AND с 0x00FF сохраняет только последние 8 значащих бит и обнуляет другие биты.

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