str.encode()
を使用しようとしていますが、
>>> "hello".encode(hex)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be string, not builtin_function_or_method
私はたくさんのバリエーションを試しましたが、それらはすべてPython 2.5.2で動作するようです。したがって、それらをPython = 3.1?
hex
コーデックは3.xでサポートされています。代わりに binascii
を使用します。
>>> binascii.hexlify(b'hello')
b'68656c6c6f'
binascii methodesは簡単です
>>> 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'
それが役に立てば幸い。 :)
Python 3)では、文字列をバイトにエンコードし、hex()
メソッドを使用して文字列を返します。
s = "hello".encode("utf-8").hex()
s
# '68656c6c6f'
オプションで、文字列をバイトに戻します。
b = bytes(s, "utf-8")
b
# b'68656c6c6f'
Python 3、すべての文字列はUnicodeです。通常、Unicodeオブジェクトを文字列にエンコードする場合、hex
はテキストではないため、.encode('TEXT_ENCODING')
を使用しますエンコーディングでは、codecs.encode()
を使用して任意のコーデックを処理する必要があります。
>>>> "hello".encode('hex')
LookupError: 'hex' is not a text encoding; use codecs.encode() to handle arbitrary codecs
>>>> import codecs
>>>> codecs.encode(b"hello", 'hex')
b'68656c6c6f'
繰り返しになりますが、「hello」はユニコードであるため、16進数にエンコードする前にバイト文字列として指定する必要があります。これは、encode
メソッドを使用する元のアプローチとよりインラインになる可能性があります。
binascii.hexlify
およびcodecs.encode
は次のとおりです。
binascii.hexlify
バイナリデータの16進表現。
戻り値はバイトオブジェクトです。
タイプ:builtin_function_or_method
codecs.encode
encode(obj、[encoding [、errors]])->オブジェクト
エンコード用に登録されたコーデックを使用してobjをエンコードします。エンコーディングのデフォルトはデフォルトのエンコーディングです。異なるエラー処理スキームを設定するためにエラーが与えられる場合があります。デフォルトは「strict」で、エンコードエラーがValueErrorを発生させることを意味します。他の可能な値は、「ignore」、「replace」、「xmlcharrefreplace」、およびValueErrorを処理できるcodecs.register_errorに登録されている他の名前です。
タイプ:builtin_function_or_method
base64.b16encode
および base64.b16decode
バイトを16進数との間で変換し、すべてのPythonバージョン。 codecsアプローチ も機能しますが、Python 3。
Python 3.xは次のとおりです:
>>> 'halo'.encode().hex()
'68616c6f'
utf-8
文字を使用してPython Interpreterに文字列を手動で入力する場合は、b
文字列:
>>> b'halo'.hex()
'68616c6f'
Python 2.x:と同等
>>> 'halo'.encode('hex')
'68616c6f'
さらに別の方法:
_s = 'hello'
h = ''.join([hex(ord(i)) for i in s]);
# outputs: '0x680x650x6c0x6c0x6f'
_
これは基本的に文字列を文字に分割し、hex(ord(char))
を介して変換を行い、文字を結合し直します。プレフィックス_0x
_のない結果が必要な場合は、次のようにします。
_h = ''.join([str(hex(ord(i)))[2:4] for i in s]);
# outputs: '68656c6c6f'
_
Python 3.5.3。