向左移动包装整个字节数组

时间:2017-06-23 09:24:50

标签: java arrays

将整个字节数组左移一个的最佳方法是什么?我从固定长度为32的字节数组开始,并希望获得32个长字节数组,但向左移一个。 例如:

Input array -> 01000001 00100000 01010100 01100101

Output array -> 10000010 01000000 10101000 11001010

如果有一个很好的功能,我可以使用番石榴。

3 个答案:

答案 0 :(得分:3)

尝试使用BigInteger,如下所示:

byte[] outputArray = new BigInteger(1, inputArray).shiftLeft().toByteArray();

答案 1 :(得分:0)

如何System.arraycopy,然后将低位字节归零:

System.arraycopy(bytes, 0, bytes, 1, 31);
bytes[0] = 0;

我没有试过这个,但doc没有任何暗示它不会起作用。

答案 2 :(得分:0)

这似乎可以解决这个问题,即将阵列移位到位:

public static void shift(byte[] bytes) {
    for (int i = 0; i < bytes.length; i++) {
        bytes[i] <<= 1;
        if (i < bytes.length - 1) {
            bytes[i] |= (bytes[i + 1] >> 7) & 1;
        }
    }
}

& 1是摆脱讨厌的符号位。

如果您希望将结果放在新数组中,则更改非常简单。

如果你想要移动一个小于8的任意距离,那么就会有更多的参与。

如果您希望移动8或更远的距离,则应使用System.arrayCopy()将字节移动n - n % 8,然后移动n % 8