python 实现crc16 字符串校验的算法

直接复制即可使用

用于安卓开发板ubuntu tcp上传用到的

参考文章crc16检验 python_Python CRC16校验算法_weixin_39628160的博客-CSDN博客def crc16(x, invert):a = 0xFFFFb = 0xA001for byte in x:a ^= ord(byte)for i in range(8):last = a % 2a >>= 1if last == 1:a ^= bs = hex(a).upper()return s[4:6]+s[2:4] if invert == True else s[2:4]+...https://blog.csdn.net/weixin_39628160/article/details/111956993

1) CRC16 校验寄存器赋值为 0xFFFF;
2) 取被校验串的第一个字节赋值给临时寄存器;
3) 临时寄存器与 CRC16 校验寄存器的高位字节进行“异或”运算,赋值给 CRC16 校验寄存器;
4) 取 CRC16 校验寄存器最后一位赋值给检测寄存器;
5) 把 CRC16 校验寄存器右移一位;
6) 若检测寄存器值为 1,CRC16 校验寄存器与多项式 0xA001 进行“异或”运算,赋值给 CRC16
校验寄存器;
7) 重复步骤 4~6,直至移出 8 位;
8) 取被校验串的下一个字节赋值给临时寄存器;
9) 重复步骤 3~8,直至被校验串的所有字节均被校验;
10) 返回 CRC16 校验寄存器的值。
校验码按照先高字节后低字节的顺序存放。
def crc16(x):
    a = 0xFFFF

    for byte in x:
        byte = str(byte)
        a = (a >> 8) ^ ord(byte)

        for i in range(8):

            last = a & 0x0001

            a >>= 1

            if last == 0x0001:
                a ^= 0xA001

    s = str(hex(a).upper())
    s1 = s[2:4] + s[4:6]
    s2 = s1.zfill(4)        --防止第一位少0的情况 保证四位数
    return s2
#例子
print(crc16('QN=20220505153000155;ST=36;CN=2101;PW=123456;MN=00003;Flag=5;CP=&&DataTime=20220505153000;LFName=20220505_1530000_1530155.mp4&&', False))
print(len('QN=20220505153000155;ST=36;CN=2101;PW=123456;MN=00002;Flag=5;CP=&&DataTime=20220505153000;LFName=20220505_1530000_1530155.mp4&&'))
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值