对于从字节到整数的转换,我有点困惑。请看下面的代码:将字节转换为整数时的问题(Java特定?)
byte[] data = new byte[] { 0, (byte) 0xF0 };
int masked = data[0] << 8 & 0xFF | data[1] & 0xFF; //240
int notMasked = data[0] << 8 | data[1]; //-16
因为在Java字节签署,不是240小数,而是2的补,-16。但是,它应该仍然是二进制:0x11110000
那么,为什么我需要做data[1] & 0xFF
?
Java是否将所有内容都转换为Integer,然后将其传递给|
运算符?为什么&0xFF
然后呢?
我前段时间做了一些代码的C到Java端口,它使用了很多按位操作,并提出了一个[helper class](https://github.com/pillingworthz/level9j/blob/master/src/java/uk /co/threeonefour/l9/vm/Conv.java)让事情变得更简单。没有关于这些质量或效率的保证,但他们为我做了这份工作。 – pauli