返回给定字节[16]数组的整数,位数介于1和128之间。大端

时间:2016-08-12 07:43:56

标签: java bit mifare

我需要检索Mifare Classic 1k块(16字节数组)的选定位范围(1-128)的整数。该数字用Big Endian表示为二进制。

我知道如何使用给定范围的按位操作手动执行此操作,但我无法创建一个方法来处理它。我也尝试过使用java.util.BitSet,但它适用于little-endian表示。

实际代码:

private int byteToInt(byte[] payload, int from, int to) {
    BitSet bitSet = BitSet.valueOf(payload);
    byte[] array = bitSet.get(from,to).toByteArray();
    if(array.length == 0)
        return 0;
    else
        return new BigInteger(array).intValue();
}

假设BigInteger构造函数上的字节数组是big-endian字节顺序,而BitSet.toByteArray()返回一个little-endian字节数组

2 个答案:

答案 0 :(得分:0)

您需要将字节数组转换为不同的字节序。看看如何将小转换为大端 Converting Little Endian to Big Endian

这里是另一种选择

Java - Convert Big-Endian to Little-Endian

答案 1 :(得分:-1)

对于大印度人来说这样的事情: -

int output = 0;
for (int index=0; index < size; index++)
{
    output = output | (arrary[index] << index);
}