10

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

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

问题是不能正确转换,因为它认为那些是有符号字节......我如何将它转换回一个 int?

4

2 回答 2

22

Java 中没有无符号数字、字节或整数或其他任何东西。int当字节在被位移之前被转换为,它们被符号扩展,即0x88=> 0xFFFFFF88。你需要掩盖你不需要的东西。

尝试这个

int i = ((b[0] << 8) & 0x0000ff00) | (b[1] & 0x000000ff);

你会得到35000。

于 2013-03-22T00:24:46.477 回答
7

您可以使用

int i = ((b[0] & 0xFF) << 8) | (b[1] & 0xFF);

或者

int i = ByteBuffer.wrap(b).getChar();

或者

int i = ByteBuffer.wrap(b).getShort() & 0xFFFF;
于 2013-03-22T02:26:21.220 回答