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

1 投票
2 回答
2365 浏览
提问于 2025-04-16 19:16

我正在处理一个在电脑上的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(整数)。

撰写回答