1

我在 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 值?

谢谢

4

2 回答 2

2

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

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

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

i现在是 16(整数)。

于 2011-06-09T19:42:42.870 回答
2

Python 总是以相同的方式打印字符串。

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

>>> binascii.hexlify('\x10\x00\x00\x00')
'10000000'
于 2011-06-09T20:26:20.537 回答