32

Python 2 では、文字列内の 16 進数の文字列表現を取得するには、次のようにします。

>>> '\x12\x34\x56\x78'.encode('hex')
'12345678'

Python 3 では、これはもう機能しません (Python 3.2 および 3.3 でテスト済み):

>>> '\x12\x34\x56\x78'.encode('hex')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: hex

SO には、コーデックが Python 3 で削除されたことに言及している回答が少なくとも1 つあります。しかし、 docsによると、Python 3.2 で「バイトからバイトへのマッピング」として再導入されました。hex

ただし、これらの「バイトからバイトへのマッピング」を機能させる方法がわかりません。

>>> b'\x12'.encode('hex')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'

そして、ドキュメントもそれについて言及していません(少なくとも私が見た場所ではありません)。単純なものが欠けているに違いありませんが、それが何であるかわかりません。

4

4 に答える 4

30

codecsモジュールとhex_codecコーデック (またはhex利用可能な場合はそのエイリアス* )を経由する必要があります。

codecs.encode(b'\x12', 'hex_codec')

* ドキュメントから: 「バージョン 3.4 で変更: バイナリ変換のエイリアスの復元」 .

于 2012-10-16T14:58:36.617 に答える
14

を使用したさらに別の方法binascii.hexlify()

>>> import binascii
>>> binascii.hexlify(b'\x12\x34\x56\x78')
b'12345678'
于 2012-10-16T16:19:05.960 に答える
10

使用base64.b16encode()

>>> import base64
>>> base64.b16encode(b'\x12\x34\x56\x78')
b'12345678'
于 2012-10-16T15:50:49.937 に答える
6

binasciiちなみに、メソッドの方が簡単です:

>>> import binascii
>>> x=b'test'
>>> x=binascii.hexlify(x)
>>> x
b'74657374'
>>> y=str(x,'ascii')
>>> y
'74657374'
>>> x=binascii.unhexlify(x)
>>> x
b'test'
>>> y=str(x,'ascii')
>>> y
'test'
于 2012-11-18T07:03:28.703 に答える