Java:将字节转换为整数

我需要在java中将2字节数组(byte [2])转换为整数值。 我怎样才能做到这一点?

您可以使用ByteBuffer

 ByteBuffer buffer = ByteBuffer.wrap(myArray); buffer.order(ByteOrder.LITTLE_ENDIAN); // if you want little-endian int result = buffer.getShort(); 

另请参见将4个字节转换为int 。

在Java中,Bytes是有符号的,这意味着字节的值可能是负数,当发生这种情况时,@ MattBall的原始解决方案将无效。

例如,如果bytes数组的二进制forms是这样的:

1000 1101 1000 1101

那么myArray [0]是1000 1101而myArray [1]是1000 1101 ,字节1000 1101的十进制值是-115而不是141(= 2 ^ 7 + 2 ^ 3 + 2 ^ 2 + 2 ^ 0)

如果我们使用

int result = (myArray[0] << 8) + myArray[1]

值为-16191 ,这是错误的。

其错误的原因在于,当我们将2字节数组解释为整数时,所有字节都是无符号的,因此在转换时,我们应该将带符号的字节映射到无符号整数:

((myArray[0] & 0xff) << 8) + (myArray[1] & 0xff)

结果是36237 ,使用计算器或ByteBuffer来检查它是否正确(我已经完成了,是的,它是正确的)。

好吧,每个字节都是-128..127范围内的整数,所以你需要一种方法将一对整数映射到一个整数。 有很多方法可以做到这一点,具体取决于您在字节对中编码的内容。 最常见的是将16位有符号整数存储为一对字节。 将其转换回整数取决于您是否将其存储为big-endianforms:

 (byte_array[0]<<8) + (byte_array[1] & 0xff) 

或小端:

 (byte_array[1]<<8) + (byte_array[0] & 0xff) 

另外,如果您可以使用Guava库:

 Ints.fromByteArray(0, 0, myArray[1], myArray[0]); 

值得一提的是,因为很多项目无论如何都会使用它。

只需这样做:

 return new BigInteger(byte[] yourByteArray).intValue(); 

在蓝牙命令转换等方面效果很好。无需担心已签名和无符号转换。