java中累加和校验后取反

累加和校验具体是啥,直接去百度,我这里简单说下就直接上代码。
假如要发送0x55,0x60, 累加和之后就是 0xB5(0b10110101),取反是0xA4(0b01001010)。。。。

0x55
0x50
0xB5(0b10110101) 累加和结果
0xA4(0b01001010) 取反

   /**
     * 累加和校验
     *
     * @param data   十六进制的字符
     * @return   十六进制的累加和结果 
     */
    public static String makeChecksum(String data) {
        if (data == null || data.equals("")) {
            return "";
        }
        int total = 0;
        int len = data.length();
        int num = 0;
        while (num < len) {
        	// 该循环里的  num+4  这个4 是根据实际来决定  如果是 一个字节的累加那就是+2   两个字节的累加就是 +4
            String s = data.substring(num, num + 4);
            total += Integer.parseInt(s, 16);
            num = num + 4;
        }
        //65535 同上  如果是 一个字节的累加那就是255 两个字节的累加就是 65535   取反同理  
        int mod = total % 65536;
        String hex = Integer.toHexString(mod);
        len = hex.length();
        // 如果不够校验位的长度,补0,这里用的是两位校验
        if (len < 2) {
            hex = "0" + hex;
        }
        return hex;
    }

//  取反就简单了
直接使用  65535(0xFFFF) 或者 255(0xFF)  减去  十进制的值  就是取反后的结果(十进制)


我写过一个进制转换的;不会的就可以去参考





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值