将int转换为字节以进行串行通信

时间:2017-07-11 21:40:41

标签: python int byte modbus rs485

我需要通过RS485将一个经过修改的Airbus(一个奇怪的Modbus修改版本)十六进制命令发送到一个串行设备。我要发送的命令是0x8181521500005315。我能够以下列形式成功发送命令:

b'\x81\x81\x15\x21\x00\x00\x53\x15' 

但我想以某种方式将int变量转换为相同的格式。

这是我到目前为止所拥有的:

def advancedWriteR(param):
command = (0x818152*0x10000000000 + param*0x100000000 + genECC('r', param))

msg =command.to_bytes(8, byteorder='big')

ser.write(msg)

奇怪的是,msg变成了:

b'\x81\x81R\x15\x00\x00S\x15'

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

B' \ X81 \ x81R \ X15 \ X00 \ x00S \ X15'确切地说是 B' \ X81 \ X81 \ 52 \ X15 \ X00 \ X00 \ 53 \ X15'

您可以使用 struct 模块取回它们并强制执行:

>>> import struct
>>> struct.pack('>Q', 0x8181521500005315)
b'\x81\x81R\x15\x00\x00S\x15'
>>> struct.unpack('>Q', b'\x81\x81R\x15\x00\x00S\x15')
(9331830153036190485,)
>>> '0x{:x}'.format(9331830153036190485)
'0x8181521500005315'