2012-09-20 43 views
1

我寫信給我的十六進制格式的設備:蟒蛇,pyserial使用<code>pyserial</code>讀取應答數據

ser.write("\x01\x03\x00\x00\x00\x0A\xC5\xCD") 
data = ser.readline() 
print data 

輸出是:

Q,f� �� 
Q.f� � 
Q8f� �B 
Q5f� � 

我的問題是如何顯示在十六進制格式輸出,例如

01 03 14 50 AD 00 00 00 00 00 00 00 00 00 00 66 DC 00 00 00 09 00 00 A8 42 

此外,我怎麼能轉換爲十進制:

50AD = 20653 
66DC = 26332 
+0

請參見http://docs.python.org/release/2.4.4/ lib/typesseq-strings.html用於格式化字符串。此外,你不需要'轉換'爲十進制,這只是一個顯示問題。 – njzk2

回答

1

我想你有兩個問題:

  1. 你的Python腳本中使用的波特率不匹配您終端設置波特率。嘗試在發送一些可打印的ASCII值時進行測試。
  2. 如果您希望以十六進制形式查看數據(而不是ASCII字符),請查看您是否可以更改終端中的某些設置。
+0

這是假設數據有問題。假設串行線路上預計有16位整數,實際上看起來反應很正常。 – Krumelur

+0

@Krumelur:即使波特率不匹配,輸出也很可能看起來很規則,因爲普通波特率值是300波特(或至少是整數倍)的兩倍。 – Curd

+0

聽起來合理,但問題是如何格式化輸出,我沒有看到任何暗示數據實際上是錯誤的。 – Krumelur

2

要查看十六進制:

print ' '.join('%2x' % ord(c) for c in data) 

我不太清楚你想與觀看小數做什麼。如果您試圖以16位塊分割數據並將它們顯示爲十進制數,則應該這樣做:

print [256*ord(c) + ord(d) for c, d in zip(data[::2], data[1::2])] 
+0

謝謝,問題已解決。只需添加數據= data.encode('十六進制'),並轉換隻使用數據[4:6],謝謝@grahamstratton和所有 – user1685430