算法很简单,就是每移一个字节,保留移位溢出的BIT 位,保存为一个字节以备和下一个字节进行组合。
public static void main(String[] args) {
byte [] data = Hex.fromString("00E8080000000065289BBAEF2EC78CCD0F13571AD01BAE68000001BBB00818");
byte [] out = rightShift(data,(byte) 3);
System.out.println(Hex.toString(out));
}
public static byte[] rightShift(byte [] data , byte shiftVal){
//
// 00E80800 - > 0000 0000 1110 1000 0000 1000|||| left shift - 5 -----> 0001 1101 00
byte [] out = new byte[data.length +1];
int offset = 0;
byte first = (byte) ( ((data[0]&0xff )>> shiftVal) );
out[offset++] = first;
for (int i = 0 ; i < data.length-1 ; i++){
// right shift 3
// get last 3bits of this byte .combine these 3 bit as a byte.
// that byte OR the next shifted[3] byte
//---------------
//overflowed 3 bit
byte overflowed = (byte) ((data[i]&0xff) << (8-shiftVal));
byte next = (byte) (overflowed | ((data[i+1]&0xff)>>shiftVal));
out[offset++] = next;
}
return out;
}
Java 实现多字节移位操作
最新推荐文章于 2023-03-24 00:40:15 发布