[英]Python 3.1.1 string to hex
我正在嘗試使用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'
在 Python 3.5+ 中,將字符串編碼為字節並使用hex()
方法,返回一個字符串。
s = "hello".encode("utf-8").hex()
s
# '68656c6c6f'
(可選)將字符串轉換回字節:
b = bytes(s, "utf-8")
b
# b'68656c6c6f'
順便說一下,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'
希望能幫助到你。 :)
在 Python 3.5 及更高版本中執行此操作的最簡單方法是:
>>> 'halo'.encode().hex()
'68616c6f'
如果您使用utf-8
字符手動將字符串輸入到 Python 解釋器中,您可以通過在字符串前鍵入b
更快地輸入:
>>> b'halo'.hex()
'68616c6f'
在 Python 2.x 中等效:
>>> 'halo'.encode('hex')
'68616c6f'
在 Python 3 中,所有字符串都是 unicode。 通常,如果您將 unicode 對象編碼為字符串,則使用.encode('TEXT_ENCODING')
,因為hex
不是文本編碼,您應該使用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”是 unicode,您需要在編碼為十六進制之前將其指示為字節字符串。 這可能更符合您使用encode
方法的原始方法。
binascii.hexlify
和codecs.encode
的區別如下:
binascii.hexlify
二進制數據的十六進制表示。
返回值是一個字節對象。
類型:builtin_function_or_method
編解碼器.encode
encode(obj, [encoding[,errors]]) -> 對象
使用為編碼注冊的編解碼器對 obj 進行編碼。 encoding 默認為默認編碼。 可能會給出錯誤以設置不同的錯誤處理方案。 默認為“嚴格”,意味着編碼錯誤會引發 ValueError。 其他可能的值是 'ignore'、'replace' 和 'xmlcharrefreplace' 以及使用 codecs.register_error 注冊的可以處理 ValueError 的任何其他名稱。
類型:builtin_function_or_method
base64.b16encode
和base64.b16decode
將字節與十六進制base64.b16decode
轉換,並適用於所有 Python 版本。 編解碼器方法也有效,但在 Python 3 中不太直接。
還有一種方法:
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 測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.