16 進値を取得して文字列または整数に変換する方法を探しています。例:
>>> a = b'\x91\x44\x77\x65\x92'
>>> b = b'\x44\x45\x41\x44\x42\x45\x45\x46'
>>> a
>>> �Dwe�
>>> b
>>> 'DEADBEEF'
aおよびbの望ましい結果:
>>> 9144776592
>>> '4445414442454546'
ありがとうございました。
>>> a = b'\x91\x44\x77\x65\x92'
>>> a.encode("hex")
'9144776592'
>>> b.encode('hex')
'4445414442454546'
使用するのは良くないことに注意してください-encode('hex')
理由は次のとおりです。
Python 2 では 8 ビット文字列に対して encode() を呼び出すことができるため、16 進コーデックの使用方法は Python 2 で機能しました。つまり、既にエンコードされているものをエンコードすることができます。それは意味がありません。encode() は、8 ビット文字列を 8 ビット文字列としてエンコードするためではなく、Unicode 文字列を 8 ビット文字列にエンコードするためのものです。
Python 3 では、8 ビット文字列に対して encode() を呼び出すことができなくなったため、16 進コーデックは無意味になり、削除されました。
binasciiを使用する方が簡単で便利です。バイナリと ascii 間の変換用に設計されており、python 2 と 3 の両方で機能します。
>>> import binascii
>>> binascii.hexlify(b'\x91\x44\x77\x65\x92')
b'9144776592'
In [1]: from binascii import hexlify
In [2]: a = b'\x91\x44\x77\x65\x92'
In [3]: hexlify(a)
Out[3]: b'9144776592'
In [4]: b = b'\x44\x45\x41\x44\x42\x45\x45\x46'
In [5]: hexlify(b)
Out[5]: b'4445414442454546'
str
バイトの代わりに必要な場合:
In [7]: hexlify(a).decode('ascii')
Out[7]: '9144776592'
>>> import binascii
>>> a = b'\x91\x44\x77\x65\x92'
>>> b = b'\x44\x45\x41\x44\x42\x45\x45\x46'
>>> binascii.hexlify(a)
b'9144776592'
>>> binascii.hexlify(b)
b'4445414442454546'