如何在 Python 3.2 或更高版本中使用“十六进制”编码?

Posted

技术标签:

【中文标题】如何在 Python 3.2 或更高版本中使用“十六进制”编码?【英文标题】:How to use the 'hex' encoding in Python 3.2 or higher? 【发布时间】:2012-10-06 16:55:26 【问题描述】:

在 Python 2 中,要获取字符串中十六进制数字的字符串表示形式,您可以这样做

>>> '\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 上至少有 one answer 提到 hex 编解码器已在 Python 3 中删除。但是,according to the docs 在 Python 3.2 中被重新引入,作为“字节到字节”映射”。

但是,我不知道如何让这些“字节到字节的映射”起作用:

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

而且文档也没有提到这一点(至少不是我看过的地方)。我一定错过了一些简单的东西,但我看不到它是什么。

【问题讨论】:

看到这个答案:***.com/a/2340358/1298523 我反对将其作为骗子关闭。这个问题专门针对 Python 3.2,其中 hex 编解码器正式回归(但更难找到)。链接的问题是关于 Python 3.1。 【参考方案1】:

您需要通过codecs 模块和hex_codec 编解码器(或其hex 别名,如果可用*):

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

* 来自文档:“3.4 版更改:恢复二进制转换的别名”.

【讨论】:

你不是说codecs.encode(b'\x12', 'hex_codec')吗?使用'hex' 我只会得到LookupError: unknown encoding: hex 文档说hex 是 3.2 中的别名,但我的 3.2.3 安装有同样的错误。 虽然我找不到对错误修复的引用,但看起来 hex 从 3.4 开始又可以工作了。 谢谢!你拯救了我的一天:)【参考方案2】:

使用binascii.hexlify()的另一种方式:

>>> import binascii
>>> binascii.hexlify(b'\x12\x34\x56\x78')
b'12345678'

【讨论】:

所以你看了一下所谓的骗子,是吗? :) 不,我通常是这样做的:)【参考方案3】:

使用base64.b16encode()

>>> import base64
>>> base64.b16encode(b'\x12\x34\x56\x78')
b'12345678'

【讨论】:

【参考方案4】:

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'

【讨论】:

str(x,'ascii') 拼写更好x.decode('ascii') binascii 对于任何关心的人来说似乎也更快。

以上是关于如何在 Python 3.2 或更高版本中使用“十六进制”编码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xCode 4 或更高版本中添加或连接两个项目,例如一个项目

如何使使用旧 Java 版本开发的应用程序在 jdk 9 或更高版本上运行? [复制]

如何在 api 17 或更高版本中使 android seekbar 全宽?

如何在android 10或更高版本中获得“总是”位置的许可? (高于 API 29)?

如何确定 SQL Server 2008 或更高版本

如何在 iOS 9 fb sdk 4.8 或更高版本中从 facebook 获取好友列表?