我在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值?
由于
答案 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'