2016-11-03 8 views
0

これを広範囲に検索しましたが、この問題を修正した記事は見つかりませんでした。私は '82001B014042'のモデムから受け取ったシンプルな文字列を持っています。私は '82001B01'の前のヘッダーを無視し、16進数の '4042'をデコードしたいと思います。私のコードは以下の通りです。Python - binascii.unhexlifyと.decode( "hex")return TypeError:16進数でない数字が表示されます

rxHEX = ser.readline() 
print rxHEX   #82001B014042 
rxData = rxHEX[8:] #4042 
print rxData 
#rxData = "4042" 
rxData = rxData.decode("hex") 
#rxData = binascii.unhexlify(rxData) 
print rxData 

私は.decode( "進")またはbinascii.unhexlify(RXDATA)を使用する場合にかかわらず、私はTypeError例外受け取る:それはを返し#rxData = "4042" I非ハッシュ場合は非進数の桁が

を見つけました@ Sこれは私が期待しているものです。

なぜモデム文字列から受信したものから機能しないのですか?

私だけ

rxHEX = ser.readline() 
print rxHEX 
rxData = rxHEX[8:] 
print rxData 
I recieve 

をお持ちの場合は出力が

82001F014042

+1

'repr()'を出力したら? –

答えて

2

.readline()を使用しているため、文字列の最後に改行(またはCRLFペア)が含まれている可能性があります。したがって、rxData = rxHEX[8:].strip()を試してください。

+0

ありがとうございます。 '.strip()'を追加するとそのトリックがやりました –

0

readline末尾の改行を削除しませんです。 rsHEX.rstrip('\r\n')を使用して、任意のOSで末尾の改行を削除するか、rsHEX.strip()を使用して、先頭と末尾の空白をすべて削除します。

関連する問題