为什么binascii.a2b_hex()返回一个字符串?

Ayr*_*yrx 1 python python-2.7

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

binascii.a2b_hex(hexstr)

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

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

import binascii
print binascii.a2b_hex('48656c6c6f20576f726c6421')
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 8

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

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

>>> import binascii
>>> binascii.a2b_hex('48656c6c6f20576f726c6421')
b'Hello World!'
Run Code Online (Sandbox Code Playgroud)