我需要检索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字节数组
答案 0 :(得分:0)
您需要将字节数组转换为不同的字节序。看看如何将小转换为大端 Converting Little Endian to Big Endian
这里是另一种选择
答案 1 :(得分:-1)
对于大印度人来说这样的事情: -
int output = 0;
for (int index=0; index < size; index++)
{
output = output | (arrary[index] << index);
}