直接复制即可使用
用于安卓开发板ubuntu tcp上传用到的
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&&'))