2011-06-09 84 views
1

我在PC上的python腳本和嵌入式c之間進行通信。我有以下問題:python:從serial.read()解析字符串

從mcu(嵌入式c),我發送整數和浮點數的二進制表示。使用Br @ y的終端,我已經驗證了數字的二進制表示是從mcu發送的。在python腳本中,我使用pySerial的serial.read來獲取字節,並將它們放入列表中。

如果我從mcu發送下面的數字:0x10000000(16 base 10,little endian),它在python腳本中顯示爲'\ x10 \ x00 \ x00 \ x00',這並不可怕,因爲我只能從一致的索引中提取字符。但是,當兩個十六進制數字表示ASCII字符時,該字符串將具有ascii字符而不是\ xDD。

有什麼辦法強制字符串只使用\ xDD表示法,而不是ascii值?或者我將不得不迭代字符串,刪除'\ x'並轉換ascii值,因爲我去?

感謝

回答

2

你確定\x是字符串中?這看起來像Python的二進制數據表示字符串(repr),但字符\x實際上並不在字符串中。

結構模塊可以解壓二進制數據。

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

i現在是16(int)。

2

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

從binascii模塊嘗試 「hexlify」 功能:

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