该代码生成的 CRC16 校验码是目前主流的生成方式之一,但还有其他的生成方式。如果要改进,可以考虑使用更快速、更安全的生成方式,例如使用硬件加速的 CRC 算法或 CRC 表的方式。另外,该代码只支持 ASCII 编码的字符串,如果要支持其他编码,需要进行相应的修改。

def crc16(data):
    if isinstance(data, str):
        data = data.encode('ascii')
    crc = 0xFFFF
    for i in range(len(data)):
        crc = crc ^ (data[i] << 8)  # 将当前字节左移 8 位,然后与 CRC 寄存器异或
        for j in range(8):
            if crc & 0x8000:  # 判断最高位是否为 1
                crc = (crc << 1) ^ 0x8005  # 如果最高位为 1,则将 CRC 寄存器左移 1 位并异或 0x8005
            else:
                crc = crc << 1  # 如果最高位为 0,则将 CRC 寄存器左移 1 位
    return crc & 0xFFFF  # 返回校验码的低 16 位
CRC16 校验码生成方法 - Python 代码示例与优化建议

原文地址: https://www.cveoy.top/t/topic/lI0a 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录