将整个字节数组左移一个的最佳方法是什么?我从固定长度为32的字节数组开始,并希望获得32个长字节数组,但向左移一个。 例如:
Input array -> 01000001 00100000 01010100 01100101
Output array -> 10000010 01000000 10101000 11001010
如果有一个很好的功能,我可以使用番石榴。
答案 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
。