如何修复值相差 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.
我有一个软件可以从字节缓冲区中获取值,然后使用 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.