可能是以下几个原因导致生成的 CRC 校验码不同:

  1. 数据编码方式不同:代码中将字符串转换为 ASCII 编码,而网站可能使用了其他编码方式。
  2. 数据长度不同:CRC 校验码算法是根据数据的位数计算的,如果数据长度不同,生成的校验码也会不同。
  3. 多项式选取不同:虽然在代码和网站中都选取了相同的多项式,但是如果代码和网站使用的实现方式不同,也可能导致生成的校验码不同。

需要进一步排查以上几个因素,才能确定具体原因。

代码示例:

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 校验码生成差异分析:代码与线上结果不一致的原因

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

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