我需要能够计算CRC以便与机器通信。我在计算CRC时非常陌生,所以如果这个确切的问题已经得到回答,我很抱歉,因为我不确定我在寻找什么。无论如何,我需要在Python中计算CCIT 16位CRC。我的消息是二进制流,如下所示:
b'G18M1314D4417,2511165'
该消息也以STX开头,以ETX字符结尾。我尝试使用this Python模块:
import crc16
print(crc16.crc16xmodem(b'G18M1314D4417,2511165'))
返回了:
61154
当正确的CRC是:
A855
我错过了什么?
编辑:我使用的是Python 3.3。我得到了正确的'来自机器发送的消息的CRC。我不确定是否应该包含STX / ETX字符,因为我之前从未使用过CRC。
答案 0 :(得分:2)
我相信您的机器正在使用名为CRC-16 / MCRF4XX的参数化CRC算法。
您可以使用可以与pip
一起安装的crcmod
模块。可以使用预定义算法crc-16-mcrf4xx计算CRC。 STX和ETX应包含在CRC计算中。
import crcmod
import crcmod.predfined
STX = b'\x02'
ETX = b'\x03'
data = b'G18M1314D4417,2511165'
message = STX + data + ETX
crc16 = crcmod.predefined.Crc('crc-16-mcrf4xx')
crc16.update(message)
crc = crc16.hexdigest()
>>> crc
'A855'