对占用多字节和位的报文信号解析详解

在实际应用报文解析程序当中需要对占20位的一个报文信号进行数据解析,由于好久没有对报文解析这里的程序进行编写了所以还算了一番,现将计算过程进行记录以供大家参考,后续解析时遇到占多字节的报文信号时可以一用。

接收到的报文信号(20位,占用两个半字节):

1010 10110011 10111011    

如上所示: 红色为第一个字节,低八位;蓝色为第二个字节,中八位;绿色为第三个字节,高4位。

1010 10110011 10111011  转为十进制为    701371

10110011 10111011  转为十进制为    46011

10111011  转为十进制为    187

(10110011(转为十进制为179)) * 256 = 45824

46011 - 187 = 45824 即可得出中八位为二进制位乘256(2的八次方)算出;

验证后同理可得 高四位为二进制位乘以256*256(2的十六次方)算出;

若是20位数最低的4位是填充的第一个字节的高四位,则通过右移4位将其放在最低4位,最后再通过 &0x0F 算出结果

解析过程为最低四位直接转十进制,中八位转十进制后乘以16(即为2的4次方),高八位转十进制后乘以16*256(即为2的12次方),相加之后得最后的十进制结果。

    当然,如果位数小的话,能想到的还有更多方式,通过移位、位或、与或进行巧妙处理,还有通过函数对报文二进制数据串进行截取后直接转为十进制数,换一种思路也不失为一种好的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值