解决所有 Java 字节都已签名这一事实的最佳方法是什么?

2022-08-31 16:39:11

在Java中,没有无符号字节这样的东西。

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

解决这个问题的好方法是什么?(说不使用Java不是一种选择)


答案 1

实际上,如果您这样做,则可以摆脱if语句和加法。

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

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


答案 2

从数组中读取任何单个值时,将其复制到短整型或整数级值中,并手动将负数转换为应有的正值。

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

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