Java bit位提取

在硬件通信中,为节省带宽,通常需要从bit序列中提取特定数据。本文探讨了如何在Java中使用位操作进行此操作,通过byte类型处理bit,并在必要时创建byte数组存储超过8位的数据。代码示例展示了如何根据offset和长度提取并调整位,以适应目标存储需求。尽管代码较为复杂,期待优化建议。
摘要由CSDN通过智能技术生成

在和硬件通信中,带宽显得很重要,因此数据传输会制定非常严格的通信协议,为了节省带宽,往往会充分利用每个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) {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值