byte 相加 16进制数据相加,计算校验和

1、由于协议中的校验需要用到byte数组  相加     取后两位判断
  问题来了   byte数据怎么相加?
                     https://blog.csdn.net/dearfellow/article/details/52624063   请看这个地址
我的项目里面会用到   55 AA 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 
这样的   里面会有 AA   这又要怎么相加呢?
                       1byte(字节)=8bit(位)
                  4位(bit)二进制可以表示一个16进制数字,2字节(byte)是16位,正好可以表示4个16进制数字
                 55AA = 0101 0101 1010 1010

 

总而言之是   16进制数据相加,计算校验和

取得是低位校验和
public String makeChecksum(String data)
    {
        if (StringUtils.isEmpty(data))
        {
            return "";
        }
        
        int iTotal = 0;
        int iLen = data.length();
        int iNum = 0;
        
        while (iNum < iLen)
        {
            String s = data.substring(iNum, iNum + 2);
            System.out.println(s);
            iTotal += Integer.parseInt(s, 16);
            iNum = iNum + 2;
        }
        
        /**
         * 用256求余最大是255,即16进制的FF
         */
        int iMod = iTotal % 256;
        String sHex = Integer.toHexString(iMod);
        iLen = sHex.length();
        //如果不够校验位的长度,补0,这里用的是两位校验
        if (iLen < 2)
        {
            sHex = "0" + sHex;
        }
        return sHex;
    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值