Java无符号字节[2]到int?

时间:2013-03-22 00:18:33

标签: java type-conversion byte

我需要做的就是将无符号的两字节数组转换为整数。我知道,我知道,Java没有无符号数据类型,但我的数字是假装无符号字节。

byte[] b = {(byte)0x88, (byte)0xb8}; // aka 35000
int i = (byte)b[0] << 8 | (byte)b[1];

问题是没有正确转换,因为它认为那些是有符号的字节...如何将其转换回int?

2 个答案:

答案 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;