合并用于python中串行通信的十六进制数字串

时间:2013-04-19 16:44:54

标签: python string serial-port hex

我以ser.write('\x01\x03\x01')格式将消息发送到COM端口,效果很好。 我尝试创建一个如下的函数:

def func(inp):
# transport inp to hex format and to be like \xXY (two digits)
# merge in the way '\x01'+'\xXY'+'\x01'

但是我总是遇到插入反斜杠的问题(它可以像双反斜杠那样插入,但是端口不能将其作为单个反斜杠读取)或者通过解释器读取此反斜杠(给出错误)。
如果有人已经这样做了,请帮助我!

2 个答案:

答案 0 :(得分:0)

您可以使用binascii.unhexlify转换十六进制字符串

>>> import binascii
>>> binascii.unhexlify('010203') == '\x01\x02\x03'
True

所以你的功能是

def func(inp):
    return '\x01' + binascii.unhexlify(inp) + '\x01';

答案 1 :(得分:0)

这正是Python的struct module所针对的。您的功能可以写成:

import struct

>>> def func(inp):
...     return struct.pack('bbb', 1, inp, 1)
...
...
>>> func(22)
'\x01\x16\x01'

'b'格式字符将字节值解释为带符号的字符,'B'会将它们解释为无符号字符。