计算CRC

时间:2014-08-01 12:39:26

标签: python crc

我需要能够计算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。

1 个答案:

答案 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'