2016-03-04 38 views
1

我熟悉C++,並嘗試開始使用python。如何在ASCII二進制字段中打印

從串口線我設法接收一串二進制字符(不是ASCII)與python,讓我們說rx'緩衝區'。 我具有與本字符串分割成不同的領域中,我使用的方法是:

stx = (rx[0]) 
ctl = (rx[1]) 
node = (rx[2]) 
cTime = (rx[3:6]) 
nTime = (rx[7:10]) 
etx = (rx[11]) 

(目前我還沒有找到一種方法++定義一個結構作爲C)。

現在我的問題是通常用來打印這些字段爲ASCII:

print "%d-%d-%d-%ld-%ld-%d" % (stx,ctl,node,cTime,nTime,etx) 

的錯誤信息是:

TypeError: %d format: a number is required, not str 

我已經嘗試過的領域轉換成不同的格式,但沒有作品。 有人能幫助我嗎?

回答

0

你可能需要通過float(stx)(或int)添加到您的變量轉換爲numbers,但如果你只想打印他們只使用%s代替%d其預計變量是雙(意爲浮動)。

例如:

rx = '1' * 12 
stx = float(rx[0]) 
ctl = float(rx[1]) 
node = float(rx[2]) 
cTime = float(rx[3:6]) 
nTime = float(rx[7:10]) 
etx = float(rx[11]) 

print "%d-%d-%d-%ld-%ld-%d" % (stx,ctl,node,cTime,nTime,etx) 

打印

1-1-1-111-111-1 

或字符串你改變的最後一行:

print "%s-%s-%s-%s-%s-%s" % (stx,ctl,node,cTime,nTime,etx) 

如果你正在處理原始二進制數據你可能需要內建struct模塊。

據我瞭解(因爲你還沒有公佈實際的內容和所需的輸出我無法驗證它),你可能想是這樣的:

import struct 
stx, ctl, node, cTime, nTime, etx = struct.unpack('fffddf', rx) 

那會想到3輛彩車,2個雙打和然後再浮動1次。如果您有整數或其他數據類型,您必須編輯fffddf字符串。見format types of struct

0

BRRR awfull

我終於找到一個辦法這樣一個簡單的功能:

> print int(stx.encode('hex'),16),int(ctl.encode('hex'),16), 
> int(node.encode('hex'), 16), int(cTime.encode('hex'), 16), 
> int(nTime.encode('hex'), 16), int(etx.encode('hex'), 16) 

不知道我會喜歡蟒蛇

相關問題