【问题标题】:Java converting byte to char - conversion questions [duplicate]Java将字节转换为char - 转换问题[重复]
【发布时间】:2017-01-30 07:54:18
【问题描述】:

我在 StackOverflow 上找到了将字节转换为字符的解决方案:

byte b = 65;
char c = (char)(b & 0xFF);

我没有得到的是按位和 0xFF。上面的和这个有什么不同?

byte b = 65;
char c = (char)b;

有人可以一步一步地向我解释什么转换成什么类型​​吗?

【问题讨论】:

标签: java


【解决方案1】:

"& 0xff" 通常在 Java 中用于切断从字节到更大整数类型的隐式转换的符号扩展。

在 Java 中,byte 是有符号数据类型,其中值使用二进制补码存储,因此 -1 表示为 0xff。 -1 对应的 int 表示是 0xffffffff。因此,当从字节转换为整数时,所有附加的前导位都从字节的最高位开始填充。

0x7f 以下的字节值不需要按位和。但是如果你想转换一个例如一个不间断的空格(代码点 160 / 0xa0),它将符号扩展到 0xffa0,这是一个不同于预期 char 值 0x00a0 的字符。

【讨论】:

  • 我认为让我失望的是 0xFF 是一个 int 而不是一个字节。
猜你喜欢
  • 2011-07-02
  • 2013-07-25
  • 2019-04-05
  • 2019-03-15
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
相关资源
最近更新 更多