我在StackOverflow上找到了将字节转换为char的解决方案:
byte b = 65;
char c = (char)(b & 0xFF);
我不能得到的是按位和0xFF。以上与这个有何不同?
byte b = 65;
char c = (char)b;
有人可以一步一步地向我解释什么转换成什么类型?
答案 0 :(得分:1)
"&安培; 0xff的"通常在Java中用于切断从字节到较大整数类型的隐式转换的符号扩展。
在Java中,byte是一种带符号的数据类型,其中值使用二进制补码存储,因此-1表示为0xff。 -1的相应int表示形式是0xffffffff。因此,当从字节转换为整数时,所有附加的前导位都从字节的最高位填充。
按位,对于高达0x7f的字节值不需要。但是如果你想转换例如一个不间断的空间(代码点160 / 0xa0),它将符号扩展为0xffa0,这是一个与预期的char值0x00a0不同的字符。