CRC16 校验码生成差异分析:代码与线上结果不一致的原因
可能是以下几个原因导致生成的 CRC 校验码不同:
- 数据编码方式不同:代码中将字符串转换为 ASCII 编码,而网站可能使用了其他编码方式。
- 数据长度不同:CRC 校验码算法是根据数据的位数计算的,如果数据长度不同,生成的校验码也会不同。
- 多项式选取不同:虽然在代码和网站中都选取了相同的多项式,但是如果代码和网站使用的实现方式不同,也可能导致生成的校验码不同。
需要进一步排查以上几个因素,才能确定具体原因。
代码示例:
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/lIZQ 著作权归作者所有。请勿转载和采集!