我正在研究一个开放的源代码我碰到下面一行如何将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