如何修复值相差 4 位的字节数组?

How can I fix a byte array where the values are off by 4 bits?

我有一个软件可以从字节缓冲区中获取值,然后使用 Array.copyOfRange() 方法将它们放入几个字节数组中。我的问题是我的值偏离了 4 位。例如。

我期待一个看起来像这样的数组(以十六进制显示的值,“==”只是用来表示我的数组等于这个,我知道这不是正确的代码。它只是为了问题.)

byte[] expectedArray == {AB, CD, EF, 01, 23, 45};

相反,我的数组如下所示:

acctualArray == {9A, BC, DE, F0, 12, 34};

如您所见,它偏离了一个十六进制字符(或 4 位)。有什么方法可以将字符向左移动一个来解决我的问题,或者我是否忽略了可能导致此问题的任何内容?

每个字节加17即可。

    Number[] actualArray = new Number[]{0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34};
    for(Number b: actualArray){
        System.out.println(String.format("%2X ", b) + " -> " + String.format("%02X ", b.intValue() + 17));
    }

输出:

9A  -> AB 
BC  -> CD 
DE  -> EF 
F0  -> 101 
12  -> 23 
34  -> 45 

对于您似乎要求的内容,除了最后一个预期值之外的所有值都是可能的,因为 0x45 中的 5 是未知的。您可以使用这样的代码:

int[] actualArray = {0x9A, 0xBC, 0xDE, 0xF0, 0x12, 0x34};
int[] expectedArray = new int[actualArray.length - 1];

for (int i = 0; i < expectedArray.length; ++i)
{
    expectedArray[i] = (actualArray[i] << 4) & 0xF0 | (actualArray[i + 1] >> 4) & 0x0F;
}

这遍历实际数组中的每个值(最后一个除外)并将低四位复制到预期数组的高四位,并将下一个实际数组项的高四位复制到预期数组项的低 4 位。你应该阅读 bitwise operators.