2013-08-20 47 views
2

我根據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 !!!!

感謝

回答

4

使用ord功能。你在輸入中有一個chr(2)(它作爲一個常數,也可以表示爲'\ x02')。

i= ord(chr(2)) 
i= ord('\x02') 

會將整數2存儲在變量i中。

+0

感謝馬里奧(和mattexx,你被秒打),我確實嘗試過ord,但我通過了錯誤的變量。那是我以後的答案。再次感謝!我會盡可能地接受它 – Madivad

2

我想你想使用ord()

ch = '\x02' 
print ord(ch) 
=> 2 
+0

感謝mattexx,這正是我所尋找的,我只是做錯了,即我曾嘗試'ord',但我通過它錯誤的變量 – Madivad

相關問題