我需要做的就是将一个无符号的两字节数组转换为一个整数。我知道,我知道,Java 没有无符号数据类型,但我的数字是假装无符号字节。
byte[] b = {(byte)0x88, (byte)0xb8}; // aka 35000
int i = (byte)b[0] << 8 | (byte)b[1];
问题是不能正确转换,因为它认为那些是有符号字节......我如何将它转换回一个 int?
我需要做的就是将一个无符号的两字节数组转换为一个整数。我知道,我知道,Java 没有无符号数据类型,但我的数字是假装无符号字节。
byte[] b = {(byte)0x88, (byte)0xb8}; // aka 35000
int i = (byte)b[0] << 8 | (byte)b[1];
问题是不能正确转换,因为它认为那些是有符号字节......我如何将它转换回一个 int?
Java 中没有无符号数字、字节或整数或其他任何东西。int
当字节在被位移之前被转换为,它们被符号扩展,即0x88
=> 0xFFFFFF88
。你需要掩盖你不需要的东西。
尝试这个
int i = ((b[0] << 8) & 0x0000ff00) | (b[1] & 0x000000ff);
你会得到35000。
您可以使用
int i = ((b[0] & 0xFF) << 8) | (b[1] & 0xFF);
或者
int i = ByteBuffer.wrap(b).getChar();
或者
int i = ByteBuffer.wrap(b).getShort() & 0xFFFF;