5

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'

ありがとうございました。

4

3 に答える 3

7
>>> 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'
于 2013-08-18T10:46:12.080 に答える
3

使用binascii.hexlify:

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'
于 2013-08-18T10:46:10.360 に答える
1

binascii.hexlify の使用:

>>> 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'
于 2013-08-18T10:46:09.183 に答える