You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用crcmod计算Modbus协议CRC16校验值无法得到正确结果求助

Modbus CRC16校验计算解决方案

你的CRC初始化参数配置是正确的,问题出在输出结果的字节序处理环节:
你当前代码计算得到的CRC整数值为3320,转换为十六进制是0x0CF8,按照Modbus协议要求的「先传低字节、后传高字节」规则,拆分后低字节为0xF8、高字节为0x0C,正好对应你需要的正确校验值f8 0c。

以下是可直接输出目标格式的实现代码:

Python2 版本

import crcmod
# 该初始化参数完全符合Modbus CRC16规则:多项式0xA001、初始值0xFFFF、结果不异或
crc16 = crcmod.mkCrcFun(0x1A001, rev=True, initCrc=0xFFFF, xorOut=0x0000)
data_hex = "0104080000000900000000"
data_bytes = data_hex.decode("hex")
crc_val = crc16(data_bytes)
# 拆分高低字节,按低字节在前的格式输出
crc_low = crc_val & 0xFF
crc_high = (crc_val >> 8) & 0xFF
print "%02x %02x" % (crc_low, crc_high)

Python3 版本

import crcmod
crc16 = crcmod.mkCrcFun(0x1A001, rev=True, initCrc=0xFFFF, xorOut=0x0000)
data_hex = "0104080000000900000000"
data_bytes = bytes.fromhex(data_hex)
crc_val = crc16(data_bytes)
crc_low = crc_val & 0xFF
crc_high = (crc_val >> 8) & 0xFF
print(f"{crc_low:02x} {crc_high:02x}")

运行上述代码即可直接输出f8 0c的目标结果。

内容的提问来源于stack exchange,提问作者Moacir Ferreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:39:01