我根據docs使用pyserial在Python 2.7.5其中:如何得到一個單一的pyserial字節的整數值在python
讀取(大小= 1) 參數: 尺寸 - 要讀取的字節數。 返回:
從端口讀取的字節數。 從串口讀取大小字節。如果設置超時,它可能會按要求返回更少的字符。在沒有超時的情況下,它將被阻塞,直到讀取請求的字節數。在版本2.5中進行了更改:在可用時返回字節實例(Python 2.6和更高版本),否則返回str。
主要是我想使用的值作爲十六進制值,所以當我使用他們,我用下面的代碼:
ch = ser.read()
print ch.encode('hex')
這工作沒有任何問題。
但現在我試圖讀取一個整數的值,因爲它是從serial.read中讀取的字符串,我在遇到錯誤後遇到錯誤,因爲我嘗試獲取整數值。
例如:
print ch
打印什麼,因爲它是一種無形的字符(在這種情況下,CHR(0×02))。
print int(ch)
引發錯誤
ValueError: invalid literal for int() with base 10: '\x02'
試圖print int(ch,16)
,ch.decode()
,ch.encode('dec')
,ord(ch)
,unichr(ch)
都給予錯誤(或沒有)。
事實上,只有這樣,我有它的工作是將其轉換爲十六進制,然後再返回到一個整數:
print int(ch.encode('hex'),16)
這將返回預期2
,但我知道我這樣做的錯誤的方法。如何將chr(0x02)值簡單地轉換爲2?
相信我,我已經搜索並找到方法在python 3中執行此操作,並使用導入的模塊進行變通。有沒有一種原生的方式來做到這一點,而不訴諸於導入某些東西來獲得一個值?
編輯:我曾嘗試ord(ch)
,但它返回90
,我知道的值是2
,1),因爲這是我很期待,和2),因爲當我得到一個錯誤,它告訴我(如上)
這裏是我使用產生90
count = ser.read(1)
print "count:",ord(ch)
代碼輸出是count: 90
並儘快予剪切並粘貼該代碼以上我看到第e error count != ch
!!!!
感謝
感謝馬里奧(和mattexx,你被秒打),我確實嘗試過ord,但我通過了錯誤的變量。那是我以後的答案。再次感謝!我會盡可能地接受它 – Madivad