转换ASCII十六进制到实际真实十六进制与Crc16(Modbus)



很抱歉我的英语很差。对于一个项目,我通过将Crc-16(Modbus)代码添加到十六进制代码的末尾来发送和读取数据。我的问题是,它检测十六进制代码为ASCII。我想让十六进制代码实际上是十六进制。

这是ASCII

我想要这个

例如:这是我的十六进制代码>FE0300010000

这是Crc-16(Modbus) ->FE03000100000E39(新增0E39)

但是Crc-16必须是"0500"不是"0 e39"。这是因为python认为它是ASCII,但我需要使它成为真正的十六进制。

我再次尝试转换为字节和十六进制,但没有工作,也尝试了binascii。Hexlify没有那么好…

这里是我找到的答案,如果有人需要的话

def crc16_modbus(data: bytes) -> int:
poly = 0xA001
crc = 0xFFFF
for b in data:
crc ^= b
for i in range(8):
if crc & 0x0001:
crc = (crc >> 1) ^ poly
else:
crc >>= 1
return crc

相关内容

  • 没有找到相关文章

最新更新