首页
学习
活动
专区
圈层
工具
发布

计算CRC
EN

Stack Overflow用户
提问于 2014-08-01 12:39:26
回答 1查看 4.6K关注 0票数 0

我需要能够计算一个CRC,以便与一台机器通信。我很新计算CRC的,所以我很抱歉,如果这个确切的问题已经得到了回答,因为我不知道我在寻找什么。无论如何,我需要用Python计算一个CCIT 16位CRC。我的消息是一个二进制流,如下所示:

代码语言:javascript
复制
b'G18M1314D4417,2511165'

消息还以STX开头,以ETX字符结尾。我尝试使用 Python模块:

代码语言:javascript
复制
import crc16
print(crc16.crc16xmodem(b'G18M1314D4417,2511165'))

返回:

代码语言:javascript
复制
61154

当正确的儿童权利委员会是:

代码语言:javascript
复制
A855

我遗漏了什么?

编辑:我正在使用Python3.3。我从机器发出的一条信息中得到了正确的CRC。我不确定是否应该包含STX/ETX字符,因为我以前从未使用过CRC的字符。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-01 15:21:35

我相信你的机器正在使用一种参数化的CRC算法,名为CRC-16/MCRF4XX。

您可以使用crcmod模块,该模块可以与pip一起安装。可以使用预定义算法crc-16-mcrf4xx计算CRC。在CRC计算中应包括STX和ETX。

代码语言:javascript
复制
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'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25080488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档