CRC16 校验码生成方法 - Python 代码示例与优化建议
该代码生成的 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 位
原文地址: https://www.cveoy.top/t/topic/lI0a 著作权归作者所有。请勿转载和采集!