Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中合并用于串行通信的十六进制数字符串_Python_String_Serial Port_Hex - Fatal编程技术网

在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”换行符。谢谢!现在我不知道该使用哪种解决方案)