我已经迭代了很多文章-由于某种原因,我找不到任何描述必须是一个简单过程的文章:如何将计算出的 CRC 与原始消息结合起来,以便再次计算 CRC 得到 0(=签出正确)?我确实找到了几个使用“普通”计算的示例(只有 2 位或 3 位 CRC),但没有使用诸如[crcmod][1]
(Python 库)之类的库函数的示例。
这是我写的一个简单的程序来检查它:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
import crcmod
def test_cycle():
test_str = b"123456789"
orig_msg = test_str
print("Original message: {:s}".format(orig_msg.hex()))
#~ crc_calc = crcmod.predefined.Crc('xmodem')
crc_calc = crcmod.Crc(
0x11021,
rev = False,
initCrc = 0x0000,
xorOut = 0x0000)
crc_calc.update(orig_msg)
print("CRC: {:04x}".format(crc_calc.crcValue))
lo = crc_calc.crcValue & 0xff
hi = crc_calc.crcValue >> 8
new_msg = test_str + bytes((hi, lo))
print("Crc appended: {:s}".format(new_msg.hex()))
crc_calc.update(new_msg)
print("CRC: {:04x}".format(crc_calc.crcValue))
def main(args):
test_cycle()
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
有一些注释行,来自不同字节顺序的实验。该程序的结果是:
Original message: 313233343536373839
CRC: 31c3
Crc appended: 31323334353637383931c3
CRC: 00ef
第一个 CRC ( ) 似乎与xmodem-CRC 的预期值31C3
相符。我尝试以多种方式将获得的 CRC 与原始字符串结合起来,但从未获得“0”。我在这里错过了什么吗?