java截取byte中的n位

在公司的项目中定了一份协议,使用byte数组来传输协议数据,通常一个byte里不同的位代表着不同的数据,工作中,需要将我们想要的数据从一个byte中截取出来,特意在这里记录一下。若是有什么不足和错误请指出。

假设有这么一个byte数据b1:

11011011

假设我们需要从中获取其中的3~5位,即110,我们取出的正确的数值应该是这样的:

00000110

截取过程为右移两位,高位补0

00110110

再和00000111进行与运算,就能得出想要的数据,java中表示为(b1>>2)&0x07。

假如获取的数值是低位的连续几位,不用进行移位,直接与运算,如取出低四位00001011,直接将b1和00001111进行与运算,java表示为b1&0x0F;

假如取出的是高几位,需要右移再进行与运算,如取出高四位,将b1右移四位再和00001111进行与运算,java表示为(b1>>4)&0x0F。

在项目中还遇到一种特殊情况,就是一个byte不够用,需要另外的byte取出几位一起表示,那么这种情况又如何正确取出来?

假设b1还是

11011011

现在表示的数据要加入b2表示,b2为:

01110101

将b1,b2标红的位合成一个数值b3,b1作为b3的低位,b2的低两位作为b3的高两位,现在的目的就是要取出b3。b3应该是这样:

0111011011

b1取全值,直接与上0xFF,按照上面的方法b2取出低两位是,b2&0x03,这样b2取出是00000001,b2在b3中表示的应该是0100000000,所以b2取出的值还要左移8位,所以整个b3表示的值为b1&0xFF+(b2&0x03)<<8。

 

 

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值