python数据结构算法题一百一十:编码和解码十六进制数

问题
你想将一个十六进制字符串解码成一个字节字符串或者将一个字节字符串编码成一个十六进制字符串。
解决方案
如果你只是简单的解码或编码一个十六进制的原始字符串,可以使用  binascii模块。例如:

>>> s = b'hello'
>>> # Encode as hex
>>> import binascii
>>> h = binascii.b2a_hex(s)
>>> h
b'68656c6c6f'
>>> # Decode back to bytes
>>> binascii.a2b_hex(h)
b'hello'
>>>

类似的功能同样可以在 base64 模块中找到。例如:

>>> h = base64.b16encode(s)
>>> h
b'68656C6C6F'
>>> base64.b16decode(h)
b'hello'
>>>

讨论
大部分情况下,通过使用上述的函数来转换十六进制是很简单的。上面两种技术的主要不同在于大小写的处理。函数 base64.b16decode() 和 base64.b16encode() 只能
操作大写形式的十六进制字母,而 binascii 模块中的函数大小写都能处理。
还有一点需要注意的是编码函数所产生的输出总是一个字节字符串。如果想强制以 Unicode 形式输出,你需要增加一个额外的界面步骤。例如:

>>> print(h)
b'68656C6C6F'
>>> print(h.decode('ascii'))
68656C6C6F
>>>

在解码十六进制数时,函数 b16decode() 和 a2b_hex() 可以接受字节或 unicode字符串。但是,unicode 字符串必须仅仅只包含 ASCII 编码的十六进制数。
编码解码 Base64 数据
问题
你需要使用 Base64 格式解码或编码二进制数据。
解决方案
base64 模块中有两个函数 b64encode() and b64decode() 可以帮你解决这个问题。
例如;

>>> s = b'hello'
>>> import base64
>>> # Encode as Base64
>>> a = base64.b64encode(s)
>>> a
b'aGVsbG8='
>>> # Decode from Base64
>>> base64.b64decode(a)
b'hello'
>>>

讨论
Base64 编码仅仅用于面向字节的数据比如字节字符串和字节数组。此外,编码处理的输出结果总是一个字节字符串。如果你想混合使用 Base64 编码的数据和 Unicode文本,你必须添加一个额外的解码步骤。例如:

>>> a
'aGVsbG8='
>>>

当解码 Base64 的时候,字节字符串和 Unicode 文本都可以作为参数。但是,Unicode
字符串只能包含 ASCII 字符。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值