我想从字节数组 { 0b00000001, 0b00100011, 0b00010001} 获取特定范围的位并将其转换为另一个字节数组。例如从左到右从第 5 位到第 12 位。 结果看起来像这个字节数组 {0b00010010}。 不幸的是,我找不到更快的选项,然后逐一读取这些位并将它们附加到字符串生成器,直到 8,然后将其放入数组中。 希望有人能解决这个问题,谢谢。
最佳答案
您可以使用左移和右移操作来完成此操作。这些会将字节转换为整数,因此需要将它们转换回字节。
下面是一个基本示例。我使用从 0 开始的索引,因此为了测试您的示例,您将调用 rangeOf(sourceByteArray, 4, 11)。该函数仅演示方法;检查应该在范围上完成,并且可能可以做得更快。
public byte[] rangeOf(byte[] source, int start, int end){
int firstSourceByte = start/8;
int shift = start%8;
int size = (end - start)/8;
if ((end - start)%8>0) size++;
byte[] returnArray = new byte[size];
for(int i = 0; i < size; i++) {
returnArray[i] = (byte) (source[firstSourceByte + i] << shift);
returnArray[i] += (byte) (source[firstSourceByte + i +1] >> (8 - shift));
}
return returnArray;
}
关于java - 从字节数组中获取一系列位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54953777/