在和硬件通信中,带宽显得很重要,因此数据传输会制定非常严格的通信协议,为了节省带宽,往往会充分利用每个bit。因此,在很长的bit序列中提取相应的bit数据就显得很重要。
在Java中,最小的数据类型是byte,所以只能通过byte数据来操作。提取出的bit位放入byte数据类型中,如果超出8位,则存放到byte数组中,不够8位的bit,高位补0即可。
代码大致如下
public byte[] arrayBitCut(byte[] data, int offset, int len){
byte[] result= new byte[len%8==0? len/8:len/8+1];
if (offset+len>data.length*8) return null;
byte [] temp=data;
byte [] tempResult=new byte[(len+offset%8)%8==0? (len+offset%8)/8:(len+offset%8)/8+1];
System.arraycopy(temp,offset/8,tempResult,0,(len+offset%8)%8==0? (len+offset%8)/8:(len+offset%8)/8+1);
int j=offset%8;
tempResult[0]=(byte)(tempResult[0]<<j);
tempResult[0]=(byte)(tempResult[0]>>j);
if ((len+offset%8)%8!=0) {