2015-12-02 47 views
0

我正在用Python讀取一些字節,如何不自動將字節轉換爲Python中的ascii

但是Python正在將一些字節轉換爲ascii。這會導致問題,因爲我得到錯誤的小數。

import serial 
import time 

port = serial.Serial("dev/ttyAMA0",baudrate=115200,timeout=1.0) 

while True: 

    port.write(bytearray([0xAA,0x90,0x3B,0x85])) 

    answ = port.read(size=8) 
    print (answ) 

我得到的答覆是:

b'\xaa\x10\xb1?\x86ff\x85' 

不過我預計:

b'\xaa\x10\xb1\?\x86\f\f\x85' 

的問題是它具有比F F不同的值的FF。

+1

您的期望並不是Python中字節的正確表示。我不確定那應該是什麼。 –

+0

如果'port.read()'給你字節。你能把它列爲清單嗎?字節和字符串之間始終存在問題。 –

回答

1

顯示值只是數據的表示。數據是有效的ASCII將顯示ASCII字符,但字節實際上是:

>>> answ = b'\xaa\x10\xb1?\x86ff\x85' 
>>> for i in answ: print(hex(i)) 
... 
0xaa 
0x10 
0xb1 
0x3f 
0x86 
0x66 
0x66 
0x85 

這就是你在找什麼?

+0

是和不是...... 零件'?\ x86ff'等於63134255作爲十進制 但是'x3fx86x66x66'等於63134102102作爲小數。 你明白我的問題嗎? – EisBaer

+1

@EisBaer,'hex(63134255)=='0x3c35a2f',所以沒有任何意義。 –

+0

抱歉忘了提及我收到的字節將被轉換爲小數。 0xaa,0x10,0xb1和0x85僅僅是一個開始,停止,錯誤字節...... – EisBaer

0

顧名思義,bytearray就是一個字節數組。當你收到這些數據時,你會得到確切的字節,然後將它們存儲在你的answ變量中。然而,當你打印到屏幕蟒蛇假設ASCII編碼,所以,只要是可打印字符打印作爲字符而不是十六進制,但它們實際上是相同的如下面的代碼片段展示了:

a = b"f" 
b = b"\x66" 
if a == b: 
    print("Same") 
else: 
    print("different") 

這會打印「相同」,您可以在此處看到這些內容:http://ideone.com/6980Ty

查找一個ascii表以查看轉換是如何進行的。如果你在linux上,你可以在終端輸入man ascii來查看。

相關問題