2015-06-15 80 views
3

我正在使用PySerial測試某些硬件的Python 3.4.1中編寫了一個程序。在Python 3中將字節列表轉換爲字符串

字節從串口讀取一次,然後附加到列表中。當列表達到一定大小時,它將被髮送進行處理。 根據輸入數據的不同,數據有時必須在列表已滿之前進行處理,因此需要逐字節操作。

則列表回來爲:

[b'F', b'o', b'o'] 

對於測試腳本的一部分,我需要能夠將其轉換爲一個字符串,這樣我就可以打印:

Foo 

我的解決方案是:

b''.join([b'F', b'o', b'o']).decode("ascii") 

但它只是感覺不對。有沒有更好的方法呢?

+1

不,沒有更好的方法。你需要加入,你需要解碼。那只是生活。 – deets

+0

它很短,可讀,我相信你沒有性能問題(這是一個串行端口..)。繼續前進。 –

回答

5

國際海事組織,這是稍微更具可讀性,但我不會抱怨,如果我在審查中遇到您的代碼。經測試,在Python 2.7版:

>>> bytearray([b'F', b'o', b'o']).decode('ascii') 
u'Foo' 
+1

謝謝。不幸的是,這在3.4.1下不起作用。我得到:TypeError:需要一個整數。 – Minifig666

+0

啊。我認爲你擁有的是最好的。 –

0

如果你不喜歡怎麼join長相,你可以做如下:

bytes.join(b'', [b'F', b'o', b'o']).decode('ascii') 

這幾乎是同樣的事情在你的代碼。我認爲你不會找到更好的方法。