Java:将字节转换为整数

时间:2010-12-20 18:38:12

标签: java

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

6 个答案:

答案 0 :(得分:24)

您可以使用ByteBuffer

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

另见Convert 4 bytes to int

答案 1 :(得分:10)

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

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

  

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字节数组解释为整数时,所有字节都是 unsigned,所以在翻译时,我们应该将带符号的字节映射到无符号整数:

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

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

答案 2 :(得分:3)

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

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

或小端:

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

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:3)

只需这样做:

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

非常适合蓝牙命令转换等。无需担心已签名和无符号转换。

答案 5 :(得分:0)

import java.io.*;
public class ByteArray {

    public static void main(String[] args) throws IOException {
        File f=new File("c:/users/sample.txt");
        byte[]b={1,2,3,4,5};
        ByteArrayInputStream is=new ByteArrayInputStream(b);
        int i;
        while((i=is.read())!=-1) {
            System.out.println((int)i); 
            FileOutputStream f1=new FileOutputStream(f);
            FileOutputStream f2=new FileOutputStream(f);
            ByteArrayOutputStream b1=new ByteArrayOutputStream();
            b1.write(6545);
            b1.writeTo(f1);
            b1.writeTo(f2);
            b1.close();
        }