在Java中,没有无符号字节这样的东西。
在处理一些低级代码时,有时需要处理无符号值大于128的字节,这会导致Java将它们解释为负数,因为MSB用于签名。
解决这个问题的好方法是什么?(说不要使用Java不是一个选项)
发布于 2008-08-14 14:24:50
当从数组中读取任何单个值时,将其复制到short或int之类的值中,并手动将负数转换为正值。
byte[] foobar = ..;
int value = foobar[10];
if (value < 0) value += 256 // Patch up the 'falsely' negative value
您可以在写入数组时执行类似的转换。
发布于 2008-08-21 01:17:45
如果你这样做,实际上可以去掉if语句和加法。
byte[] foobar = ..;
int value = (foobar[10] & 0xff);
这样,Java就不会将字节解释为负数,也不会翻转整数上的符号位。
发布于 2008-08-19 08:03:28
使用int通常比使用short更好,因为java在内部使用32位值(即使是字节,除非在数组中),因此使用int可以避免在字节码中进行不必要的短值转换。
https://stackoverflow.com/questions/11088
复制相似问题