很抱歉我的英语很差。对于一个项目,我通过将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