在python中合并用于串行通信的十六进制数字符串
我正在以在python中合并用于串行通信的十六进制数字符串,python,string,serial-port,hex,Python,String,Serial Port,Hex,我正在以ser.write('\x01\x03\x01')格式将消息发送到COM端口,该格式运行良好。 我尝试创建一个如下所示的函数: def func(inp): #将inp传输为十六进制格式,类似于\xXY(两位数) #以'\x01'+'\xXY'+'\x01'的方式合并。 但是我在插入反斜杠(可以像插入双反斜杠一样插入,但端口无法将其作为单个反斜杠读取)或由解释器读取此反斜杠(给出错误)时总是遇到问题。 如果有人已经做了,请帮帮我 您可以使用binascii.unhexlify转换十六进制
ser.write('\x01\x03\x01')
格式将消息发送到COM端口,该格式运行良好。
我尝试创建一个如下所示的函数:
def func(inp):
#将inp传输为十六进制格式,类似于\xXY(两位数)
#以'\x01'+'\xXY'+'\x01'的方式合并。
但是我在插入反斜杠(可以像插入双反斜杠一样插入,但端口无法将其作为单个反斜杠读取)或由解释器读取此反斜杠(给出错误)时总是遇到问题。如果有人已经做了,请帮帮我 您可以使用
binascii.unhexlify
转换十六进制字符串
>>> import binascii
>>> binascii.unhexlify('010203') == '\x01\x02\x03'
True
所以你的函数是
def func(inp):
return '\x01' + binascii.unhexlify(inp) + '\x01';
这正是Python的用途。您的函数可以编写为:
import struct
>>> def func(inp):
... return struct.pack('bbb', 1, inp, 1)
...
...
>>> func(22)
'\x01\x16\x01'
'b'
格式字符将字节值解释为有符号字符,'b'
将它们解释为无符号字符。谢谢!当我输入10(获得0A)时,函数将其解释为\n。您是否碰巧知道端口是否会以这种方式识别消息?(我现在没有董事会)是的,这应该是正确的行为。它只是像那样显示\01,因为该字节没有其他可打印的表示形式。0x0A的可打印表示形式是“\n”换行符。谢谢!现在我不知道该使用哪种解决方案)