2016-05-23 22 views
0

ファイルを読み込んでいますが、ord()関数と一緒に使用できるord-numberを計算してください。unhexlify中のPython - Binasciiエラー

その後、私はこの文字のバイト表現を得るためにこの数値をunhexlifyします。なぜなら私は非ASCII文字を使ってこれらをファイルに書き込むからです。

キャリッジリターンとしてよく知られている「CR」を読むまでは、すべてうまくいきます。

私のプログラムでエラーが発生します:

Traceback (most recent call last): 
    File "C:\Users\#######", line xx: 
    x2 = binascii.unhexlify(format(Echr,"x")) 
binascii.Error: Odd-length string 

あなたはこのエラーが上がり、この問題を解決する方法を、なぜ任意のアイデアを得たのですか?今のところ、CRはこのエラーを引き起こしています。

+0

文字列が奇数の長さを有しています。おそらく、文字列の生成方法を示す必要があります。 –

答えて

1

奇数長の文字列をunhexlifyに渡そうとしていますが、のペアではの16進文字しか処理できません。

あなたは0〜255の範囲の整数値からあなたの六角を生産している場合、パッド 0を使用して16進数文字列にしてください:

x2 = binascii.unhexlify(format(Echr, "02x")) 

フォーマットさ02xはあなたに合うようにformat()機能を伝えます

>>> format(13, '02x') 
'0d' 
>>> binascii.unhexlify(format(10, '02x')) 
'\r' 

は、format()と一緒binascii.unhexlifyを使用しなくroundaboある:先行ゼロで幅2のフィールド内の数値は、実際の値は短いがある場合しかし、バイトを作成する方法です。あなたはすべてのことをスキップして、整数から文字を生成chr() function、まっすぐに行くことができます:

>>> chr(13) 
'\r' 
+0

それは私の穴のスクリプトの一部であるので、それはラウンドアバウトではありません。とにかくそれは働いた。私はちょうどxの前にこの02がないCRを除いて、なぜそれがすべてをするのだろうか? – freedome97

+0

@ freedome97:他のすべてのバイトは15より大きい値を持つので、2つの16進文字がそれぞれ生成されます。 –

関連する問題