2017-07-05 11 views
0

シリアルポートからデータを受信しました。それはASCIIデータ(パテのようなものではない)ですが、modbus rtu行からの16進数のデータです(例えば、0103AABBCCDD816Eのデータがあります。01は未処理の16進数、03は未処理の16進数など...)印刷機能のシリアルポートから16進データを表示

私は単に0103AABBCCDD816E

として印刷する必要があるのpython 3.6

を使用しています私はこのコードを試してみました:

rx_raw = ser.read(8) 
rx=binascii.hexlify(bytearray(rx_raw)) 
print("raw: ") 
print(rx_raw) # gives: b'\x01\x03\xaa\xbb\xcc\xdd\x81n' 
print("\n") 
print("hexiflied: ") 
print(rx)  # gives: b'0103aabbccdd816e' 

binascii.hexlify(bytearray(rx_raw))は私が必要なものはほとんどですが、私は取り除く必要がありますb' '

答えて

0

あなたはそれをデコードする必要があり、通常の文字列にバイナリ文字列を変換したい場合:

bytes.decode(エンコーディングは= "UTF-8":docsから

b = b'0103aabbccdd816e' 
s = b.decode('ascii') 

print(b, s, s.upper()) 
# b'0103aabbccdd816e' 0103aabbccdd816e 0103AABBCCDD816E 

、エラー=) "厳格な"
bytearray.decode(エンコーディングは= "UTF-8"、エラー= "厳密")

戻り列目から復号eバイトを指定します。デフォルトのエンコーディングは 'utf-8'です。異なるエラー処理スキームを設定するためにエラーを与えることができる。エラーのデフォルトは 'strict'です。つまり、エンコードエラーによってUnicodeErrorが発生します。他の可能な値は、 'ignore'、 'replace'、およびcodecs.register_error()によって登録された他の名前です(see sectionエラーハンドラ)。可能なエンコーディングのリストについては、see section標準エンコーディング。

+0

ありがとう、マイク。作品は完璧です! :) 素敵な一日を! – denderdale

関連する問題