2012-02-04 96 views
5

我正在研究一個開放的源代碼我碰到下面一行如何將char轉換爲字節?

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

有人能解釋什麼是該行實際發生的事情哪裏傳來???

+2

'&0x00FF'是多餘的。 – 2012-02-04 09:10:09

回答

9

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值。

+1

你屏蔽掉了8位左邊的最高位,並保留了最右邊的位。使用和運算符,掩碼的左邊部分中的零迫使結果爲零。 – Tony 2017-04-18 23:58:47

+0

謝謝,這是一個很好的接觸。我現在糾正了它。 – anubhava 2017-04-19 10:11:31

2

AND與0x00FF保留只有最後8個有效位和零其他位。

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

我確信A5應該是一個0xA5 - 只是爲了保持一致性。 – Chexxor 2016-07-21 11:50:26