python:从serial.read()解析字符串
我正在处理一个在电脑上的Python脚本和嵌入式C之间的通信。现在遇到了一些问题:
从微控制器(嵌入式C)发送整数和浮点数的二进制表示。我用Br@y's终端确认了这些数字的二进制表示确实是从微控制器发送过来的。在Python脚本中,我使用pySerial的serial.read来获取字节,并把它们放进一个列表里。
如果我从微控制器发送这个数字:0x10000000(十进制16,以小端格式),在Python脚本中显示为'\x10\x00\x00\x00'。这还算可以,因为我可以从固定的位置提取字符。不过,当两个十六进制数字代表一个ASCII字符时,字符串中会显示这个ASCII字符,而不是\xDD。
有没有办法强制字符串只使用\xDD的表示,而不是ASCII值?还是说我只能一个一个遍历字符串,去掉'\x'并转换ASCII值呢?
谢谢
2 个回答
2
Python总是以相同的方式打印字符串。
你可以试试来自binascii模块的“hexlify”函数:
>>> binascii.hexlify('\x10\x00\x00\x00')
'10000000'
2
你确定字符串里有 \x
吗?看起来这像是Python用来表示二进制数据的方式,但实际上 \x
这些字符并不在字符串里。
你可以使用结构体模块来解压这些二进制数据。
s = '\x10\x00\x00\x00'
i = struct.unpack("I", s)[0]
i
现在是16(整数)。