2

这是标准库文档中对该函数的描述。

binascii.a2b_hex(hexstr)

返回十六进制字符串 hexstr 表示的二进制数据。此函数是 b2a_hex() 的逆函数。hexstr 必须包含偶数个十六进制数字(可以是大写或小写),否则会引发 TypeError。

但是,以下代码示例打印出来Hello World!

import binascii
print binascii.a2b_hex('48656c6c6f20576f726c6421')

为什么print将二进制数据解释为字符串?到底发生了什么?

4

2 回答 2

11

因为在 Python 2 中,所有二进制数据都表示为字符串。str类型基本上只是一个字节序列。

在 Python 3 中,基本str类型是 unicode 值(unicode()在 Python 2 中),而 Python 2str类型已重命名为bytesa2b_hex函数输出字节:

>>> import binascii
>>> binascii.a2b_hex('48656c6c6f20576f726c6421')
b'Hello World!'
于 2013-05-29T07:55:41.670 回答
0

Martjin 的回答简单而完整,但是那些找到这张票以获得一些能力参考的人,请:

# equivalent of `binascii.a2b_hex` in python 3:
binascii.a2b_hex('48656c6c6f20576f726c6421').decode('latin-1')

# equivalent of `binascii.b2a_hex` in python 3:
binascii.b2a_hex('Hello World!'.encode('latin-1')).decode().upper()
于 2021-08-17T09:23:38.853 回答