【发布时间】:2017-01-30 07:54:18
【问题描述】:
我在 StackOverflow 上找到了将字节转换为字符的解决方案:
byte b = 65;
char c = (char)(b & 0xFF);
我没有得到的是按位和 0xFF。上面的和这个有什么不同?
byte b = 65;
char c = (char)b;
有人可以一步一步地向我解释什么转换成什么类型吗?
【问题讨论】:
标签: java
我在 StackOverflow 上找到了将字节转换为字符的解决方案:
byte b = 65;
char c = (char)(b & 0xFF);
我没有得到的是按位和 0xFF。上面的和这个有什么不同?
byte b = 65;
char c = (char)b;
有人可以一步一步地向我解释什么转换成什么类型吗?
【问题讨论】:
标签: java
"& 0xff" 通常在 Java 中用于切断从字节到更大整数类型的隐式转换的符号扩展。
在 Java 中,byte 是有符号数据类型,其中值使用二进制补码存储,因此 -1 表示为 0xff。 -1 对应的 int 表示是 0xffffffff。因此,当从字节转换为整数时,所有附加的前导位都从字节的最高位开始填充。
0x7f 以下的字节值不需要按位和。但是如果你想转换一个例如一个不间断的空格(代码点 160 / 0xa0),它将符号扩展到 0xffa0,这是一个不同于预期 char 值 0x00a0 的字符。
【讨论】: