python:从serial.read()解析字符串

时间:2011-06-09 19:33:00

标签: python ascii hex pyserial

我在PC上的python脚本和嵌入式c之间进行通信。我有以下问题:

从mcu(嵌入式c),我发送整数和浮点数的二进制表示。使用Br @ y的终端,我已经验证了数字的二进制表示是从mcu发送的。在python脚本中,我使用pySerial的serial.read来获取字节,将它们放入列表中。

如果我从mcu发送以下号码:0x10000000(16 base 10,小端),它在python脚本中显示为'\ x10 \ x00 \ x00 \ x00',这并不可怕,因为我可以从一致的索引中拉出字符。但是,当两个十六进制数字表示ascii字符时,该字符串将具有ascii字符而不是\ xDD。

有没有办法强制字符串只使用\ xDD表示,而不是ascii值?或者我是否必须迭代字符串,删除'\ x'并转换ascii值?

由于

2 个答案:

答案 0 :(得分:2)

你确定\x在字符串中吗?对于二进制数据,它看起来像Python的表示字符串(repr),但字符\x实际上不在字符串中。

struct模块可以解压缩二进制数据。

s = '\x10\x00\x00\x00'
i = struct.unpack("I", s)[0]

i现在是16(int)。

答案 1 :(得分:2)

Python始终以相同的方式打印字符串。

尝试binascii模块中的“hexlify”功能:

>>> binascii.hexlify('\x10\x00\x00\x00')
'10000000'