Python 3 字符串转16进制

82 投票
10 回答
231660 浏览
提问于 2025-04-15 19:45

在Python 2中,这些代码都能正常运行:

>>> "hello".encode("hex")
'68656c6c6f'
>>> b"hello".encode("hex")
'68656c6c6f'
>>> u"hello".encode("hex")
'68656c6c6f'

但是在Python 3中:

>>> "hello".encode("hex")
LookupError: 'hex' is not a text encoding; use codecs.encode() to handle arbitrary codecs

怎么在Python 3中把字符串转换成十六进制呢?

10 个回答

26

你已经得到了不错的回答,但我觉得你可能也会对一些背景信息感兴趣。

首先,你缺少了引号。应该是:

"hello".encode("hex")

其次,这个编解码器还没有移植到Python 3.1。你可以在这里查看。看起来他们还没有决定这些编解码器是否应该包含在Python 3中,或者用其他方式实现。

如果你查看一下与这个问题相关的差异文件,你可以看到提议的实现方法:

import binascii
output = binascii.b2a_hex(input)
55

在Python 3.5及以上版本中,可以把字符串转换成字节,然后使用hex()这个方法,这样就会返回一个字符串。

s = "hello".encode("utf-8").hex()
s
# '68656c6c6f'

如果需要的话,还可以把这个字符串再转换回字节:

b = bytes(s, "utf-8")
b
# b'68656c6c6f'
107

在Python 3.x版本中,hex这个编码方式被去掉了。你可以使用binascii来代替它:

>>> binascii.hexlify(b'hello')
b'68656c6c6f'

撰写回答