将 int 转换为字节以进行串行通信
Converting an int to bytes for serial communication
我需要通过 RS485 将修改版的空中客车(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'
非常感谢任何帮助!
b'\x81\x81R\x15\x00\x00S\x15' 正好是
b'\x81\x81\x15\x00\x00\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'
我需要通过 RS485 将修改版的空中客车(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'
非常感谢任何帮助!
b'\x81\x81R\x15\x00\x00S\x15' 正好是
b'\x81\x81\x15\x00\x00\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'