在Java中将两个无符号字节转换为int

时间:2017-05-18 06:43:02

标签: java byte unsigned

所以假设我有两个无符号字节从设备到我的软件:

我可以通过以下方式阅读它们的价值:

int first = buffer[0] & 0xFF;
int second = buffer[1] & 0xFF;

然后如何将这两个数字转换为Java中的int?

简而言之:将无符号字节缓冲区数组转换为int

更多详情:

所以,假设我有一个有符号字节数组,我可以通过这种方式将其转换为int:

int val = ((bytes[0] & 0xff) << 8) | (bytes[1] & 0xff);

但是我应该怎么做才能将无符号字节数组转换为int?

//更新:

想出了转换它的方法:

private int toInt(byte[] b) {
    int x = (0 << 24) | (0 << 16)
            | ((b[1] & 0xFF) << 8) | ((b[0] & 0xFF) << 0);
    return x;
}

1 个答案:

答案 0 :(得分:0)

我不知道这是否是你想要的,但你可以这样做:

    int b1 = ...; // first byte
    int b2 = ...; // second byte
    String binaryString = pad0s(Integer.toBinaryString(b1), 8) + pad0s(Integer.toBinaryString(b2), 8);
    System.out.println(Integer.valueOf(binaryString, 2));

pad0s定义为:

private static String pad0s(String str, int length) {
    if (str.length() >= length) return str;
    int diff = length - str.length();
    StringBuilder sb = new StringBuilder(str);
    for (int i = 0 ; i < diff ; i++) {
        sb.insert(0, "0");
    }
    return sb.toString();
}
相关问题