我正在研究一個開放的源代碼我碰到下面一行如何將char轉換爲字節?
stringBytes[i] = (byte) (stringChars[i] & 0x00FF);
有人能解釋什麼是該行實際發生的事情哪裏傳來???
我正在研究一個開放的源代碼我碰到下面一行如何將char轉換爲字節?
stringBytes[i] = (byte) (stringChars[i] & 0x00FF);
有人能解釋什麼是該行實際發生的事情哪裏傳來???
Char由2個字節的Java組成,當然字節是單字節。
因此,在這種操作:
stringBytes[i] = (byte) stringChars[i] & 0x00FF
char值(16位)正在二進制相與用數設爲$ 00FF(二進制:0000 0000 1111 1111),使之一個字節。
通過與8 0s and 8 1s
進行二進制「與」運算,您基本上可以屏蔽掉char值的8個最左或最高有效位(MSB),從而只保留8個最右或最低有效位(LSB)。然後代碼通過使用轉換(byte)
將結果值分配給一個字節,否則爲int
值。
AND與0x00FF保留只有最後8個有效位和零其他位。
E.g.:
0xD2A5 & 0x00FF = 1101001010100101 & 0000000011111111 = 0000000010100101 = A5
我確信A5應該是一個0xA5 - 只是爲了保持一致性。 – Chexxor 2016-07-21 11:50:26
'&0x00FF'是多餘的。 – 2012-02-04 09:10:09