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