2012-02-04 65 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