Python中的十六进制格式

时间:2012-08-03 18:50:24

标签: python hex type-conversion pyserial

我已经被困在这一段了一段时间了。我需要在python中向设备发送一个串行命令。以下是格式示例:

ser = serial.Serial('/dev/ttyO1',baudrate=115200)
ser.write('\xAA\x04\x05\x00\x00\x00')

如果我使用格式.write(~hex bytes〜)

进行通信,我能够正常通信

然而,当我需要接收更大的数据块时,设备的通信协议将事物分成数据包,我必须确认接收每个数据包。为了避免在为每个数据包输入单独的ser.write()命令时得到腕管综合症,我想写一个循环来为我做数据包计数/确认。这就是我所拥有的:

for n in range(0,num_packets,1):

    x = '\\x'"%0.2x"%(n)    
    print('Picture Ready Host Ack')
    ser.write('\xAA\x0E\x00\x00' + x + '\x00')
    time.sleep(.1)
    response = ser.read(ser.inWaiting())
    image_write(response,base_path, filename)        

但是,双斜杠('\ x'..)给了我两个斜杠:

'\xaa\x0e\x00\x00\\x05\x00'

当我定义变量x:

时,单个斜杠('\ x'...)会返回问题
ValueError: invalid \x escape

...帮助?

2 个答案:

答案 0 :(得分:2)

如果不是将x定义为'\\x'"%0.2x"%(n),而是x = chr(n),那么一切都应该有用。

答案 1 :(得分:0)

\xij只是扩展为角色chr(int(ij, 16)) 既然你无论如何发送字节,我会在循环中说,发送你的第一个块。不要向它添加任何内容,然后通过chr(int(n),16)发送分隔符,然后发送下一个块。这应该可以解决你的问题。