我正在尝试正确使用crcmod,但我遇到了问题:例如,我想将字符串"1234567809"
转换为字节b'x12x34x56x78x09'
,以便获得正确的crc16-modbus代码。
import crcmod
crc16 = crcmod.mkCrcFun(0x18005, rev=True, initCrc=0xffff)
for i in range(len(a)//2):
a = a[:(i*4)] + r"x" + a[i*4:]
问题是r"x"
插入'\x'
而不是'x'
,并且CCD_ 6当然返回错误。
a.encode("utf-8")
当然返回CCD_ 7。
这是\x
:的结果
hex(crc16(a.encode("utf-8")))
'0x68b7'
这就是我所期望的结果:
hex(crc16(b'x12x34x56x78x09'))
'0x2590'
您可以直接将字符串'1234567809'
转换为所需的字节数:
source = '1234567809'
a = bytes.fromhex(source)
现在crc应该工作了:
hex(crc16(a))