GDL90规范CRC-16校验表C代码转Python3.8结果异常排查咨询
问题排查与解决方案
错误根因
你转换后的代码异常核心是C和Python的整数运算机制差异:
- C语言中代码使用的无符号整型为16位宽度,每次左移操作产生的超出16位的高位会被自动截断,最终结果天然限定在16位范围内
- Python的整数为任意精度类型,没有位宽限制,左移产生的高位会一直保留,累加后就会出现数值超出16位、单调递增的异常结果
修复方法
在每轮CRC运算完成后,手动添加16位掩码& 0xFFFF,丢弃超出16位的高位即可。
修正后代码
crcTable = [] for i in range(256): crc = (i << 8) & 0xFFFF for bitctr in range(8): val = 0x1021 if (crc & 0x8000) else 0 crc = ((crc << 1) ^ val) & 0xFFFF crcTable.append(hex(crc))
验证说明
修正后生成的CRC表和GDL90规范定义的CRC-16(多项式0x1021)查找表完全一致,可直接使用。
内容的提问来源于stack exchange,提问作者C382
相关产品推荐
相关产品推荐

