【问题标题】:python: parsing strings from serial.read()python:从serial.read()解析字符串
【发布时间】:2011-09-11 23:55:25
【问题描述】:

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

谢谢

【问题讨论】:

    标签: python ascii hex pyserial


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      i 现在是 16(整数)。

      【讨论】:

        猜你喜欢
        • 2021-10-29
        • 2016-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-31
        • 1970-01-01
        • 2015-10-17
        • 1970-01-01
        相关资源
        最近更新 更多