解决所有Java字节都被签名的最佳方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (50)

在Java中,不存在无符号字节。

使用一些低级代码时,有时需要处理无符号值大于128的字节,这会导致Java将其解释为负数,因为MSB用于符号。

解决这个问题的好方法是什么?

提问于
用户回答回答于

当读取数组中的任何单个值时,将其复制到类似短值或int的东西中,并手动将负数转换为应该是正数。

byte[] foobar = ..;
int value = foobar[10];
if (value < 0) value += 256 // Patch up the 'falsely' negative value

写入数组时可以执行类似的转换。

用户回答回答于

实际上,如果这样做,可以去掉if语句和加法语句。

byte[] foobar = ..;
int value = (foobar[10] & 0xff);

这样,Java就不会将字节解释为负数,并在整数上翻转符号位。

扫码关注云+社区