Java 返回给定字节[16]数组的整数,位范围在1到128之间。大端

Java 返回给定字节[16]数组的整数,位范围在1到128之间。大端,java,bit,mifare,Java,Bit,Mifare,我需要为Mifare Classic 1k块(16字节数组)的选定位范围(1-128)检索一个整数。数字用大端号表示为二进制 我知道如何在给定的范围内手动执行逐位操作,但我无法创建一个方法来处理它。我也尝试过使用java.util.BitSet,但它只使用很少的endian表示 实际代码: private int byteToInt(byte[] payload, int from, int to) { BitSet bitSet = BitSet.valueOf(payload);

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

我知道如何在给定的范围内手动执行逐位操作,但我无法创建一个方法来处理它。我也尝试过使用java.util.BitSet,但它只使用很少的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()返回一个小的endian字节数组

您需要将字节数组转换为不同的endianness。看看这里,如何将小端转换为大端

还有另一件事


对于big indane来说,类似这样的事情:-

int output = 0;
for (int index=0; index < size; index++)
{
    output = output | (arrary[index] << index);
}
int输出=0;
对于(int index=0;indexoutput=output |(数组[index]能否请您发布代码,以获得最佳效果。感谢
biginger
的构造函数已经接受了以big-endian表示的字节数组。那么您想做什么呢?output |=(数组[index]感谢您接受答案。biginger输出=biginger.valueOf(0);循环内输出=输出。或(阵列[索引]