['Error', 'Incomplete',

'b2a_hex', 'hexlify' #Hexadecimal representation of binary data. 字符串转16进制
'a2b_hex', 'unhexlify', #Binary data of hexadecimal representation 16进制转字符串
'b2a_base64', #Base64-code line of data. base64加密
'a2b_base64', #Decode a line of base64 data. base64解密
'crc32', #Compute CRC-32 incrementally

'a2b_hqx', 'b2a_hqx', 'crc_hqx', 'rlecode_hqx', 'rledecode_hqx'
'a2b_qp', 'b2a_qp'
'a2b_uu', 'b2a_uu'
]

s = 'abcde'
h = B.b2a_hex(s.encode()) #'6162636465'
h = B.hexlify(s.encode())
crc = B.crc32(h)

s = B.a2b_hex(h).decode()
s = B.unhexlify(h).decode() #'abcde'

h = B.b2a_base64(s.encode()) #b'YWJjZGU=\n'
s = B.a2b_base64(h).decode() #'abcde'


base64 标准模块。
binhex 标准模块。
uu 标准模块。
quopri 标准模块。

binascii模块包含很多用来方法来转换二进制和各种ASCII编码的二进制表示法。通常不直接使用这些功能,而是使用封装模块,如uu, base64或binhex。binascii模块包含用C语言编写更快的低级功能,通常为高级模块所使用。

Uu编码
uu编码格式现在已经比较少使用,相关函数binascii.a2b_uu(string)和binascii.b2a_uu(data)这里不做介绍。

Binhex编码
Binhex用于Macintosh平台。这里暂不做介绍。相关函数有:binascii.rledecode_hqx(data) ,binascii.rlecode_hqx(data),binascii.a2b_hqx(data),binascii.b2a_hqx(data) ,binascii.crc_hqx(data, crc)。

Base64编码
binascii.a2b_base64(string):转换的base64数据块为二进制,并返回二进制数据。一次可以传递多行。和base64. b64decode对应。
binascii.b2a_base64(data):转换二进制数据为一行base64编码的ASCII字符。返回字符串包含换行符。根据base64的标准data的长度最大为57。和base64. b64encode对应。

QP码
Quoted-printable,或QP encoding,没有规范的中文译名,可译为“可打印字符引用编码”、“使用可打印字符的编码”。Quoted-printable是使用可打印的ASCII字符 (如字母、数字与"=")表示各种编码格式下的字符,以便能在7-bit数据通路上传输8-bit数据, 或者更一般地说在非8-bit clean媒体上正确处理数据。这被定义为MIME content transfer encoding,用于e-mail。
QP使用"="开头的转义字符. 一般限制行宽为76,因为有些软件限制了行宽.
binascii.a2b_qp(string[, header]):转换引述打印数据块为二进制,并返回二进制数据。多行可以在同一时间被传递。如果可选参数头存在和真实,下划线将被解码为空格。
实际上,QP码是是把’\x00’转换成’=00’,也就是替换’\x’为’=’。

>>> s ='\x00='
>>> s = '=\x00hello'
>>> import binascii
>>> encoded = binascii.b2a_qp(s)
>>> encoded
'=3D=00hello'
>>> decoded = binascii.a2b_qp(encoded)
>>> print decoded
=hello
>>> print repr(decoded)
'=\x00hello'

CRC校验和
binascii.crc32(data[, crc]):计算的data 的32位校验和CRC-32时,crc为初始CRC 。crc32与ZIP文件的校验和一致。

>>> print binascii.crc32("hello world")
222957957
>>> crc = binascii.crc32("hello")
>>> crc = binascii.crc32(" world", crc) & 0xffffffff
>>> print 'crc32 = 0x%08x' % crc
crc32 = 0x0d4a1185
>>> crc
222957957
为了保证跨平台,可以在crc结果上& 0xffffffff。原因如下:
Changed in version 2.6: The return value is in the range [-2**31, 2**31-1] regardless of platform. In the past the value would be signed on some platforms and unsigned on others. Use & 0xffffffff on the value if you want it to match Python 3 behavior.
Changed in version 3.0: The return value is unsigned and in the range [0, 2**32-1] regardless of platform.

二进制转换
binascii.b2a_hex(data)和binascii.hexlify(data):返回二进制数据的十六进制表示。每个字节被转换成相应的2位十六进制表示形式。因此,得到的字符串是是原数据长度的两倍。
binascii.a2b_hex(hexstr) 和binascii.unhexlify(hexstr):从十六进制字符串hexstr返回二进制数据。是b2a_hex的逆向操作。 hexstr必须包含偶数个十六进制数字(可以是大写或小写),否则报TypeError。
>>> s = 'hello'
>>> b = b2a_hex(s)
>>> print b
68656c6c6f
>>> a2b_hex(b)
'hello'
>>> b = hexlify(s)
>>> print b
68656c6c6f
>>> unhexlify(b)
'hello'

python binascii模块详解的更多相关文章

  1. python time模块详解

    python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明  一.简介 ...

  2. python docopt模块详解

    python docopt模块详解 docopt 本质上是在 Python 中引入了一种针对命令行参数的形式语言,在代码的最开头使用 """ ""&q ...

  3. (转)python collections模块详解

    python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...

  4. python pathlib模块详解

    python pathlib模块详解    

  5. Python Fabric模块详解

    Python Fabric模块详解 什么是Fabric? 简单介绍一下: ​ Fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理效率. 再具体点介绍一下,Fabri ...

  6. python time 模块详解

    Python中time模块详解 发表于2011年5月5日 12:58 a.m.    位于分类我爱Python 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括: ...

  7. python常用模块详解

    python常用模块详解 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用p ...

  8. python os模块详解

    一.Python os模块(Linux环境) 1.1 执行shell命令 os.system('cmd') 执行命令不保存结果 os.popen('command') 执行后返回结果,使用.read( ...

  9. Python ZipFile模块详解(转)

    Python zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个cl ...

随机推荐

  1. Spring4+quartz2集群借助邮箱或是短信实现生日的农历提醒(Quartz实现农历、阴历、公历生日提醒)

    自己记性差,除了老婆.老大和自己的生日以外,一直记不住亲朋好友的生日,长辈们的生日基本上又都是用农历来算,公历的话,直接用Quartz设置循环提醒,农历就没辙了,每每搞的自己很尴尬,需要别人来提醒自己 ...

  2. NumPy-高速处理数据

    Numpy简单介绍 标准安装的Python中用列表(list)保存一组值,能够用来当作数组使用,只是因为列表的元素能够是不论什么对象,因此列表中所保存的是对象的指针.这样为了保存一个简单的[1,2,3 ...

  3. 用FadingActionBar实现有头图的ActionBar

         FadingActionBar这个开源项目在社区上很火,感觉Google I/O 2014中就有它的身影.今天我们来介绍下这个实用的开源项目. 首先是到这里(https://github.c ...

  4. [Web 前端] React Router v4 入坑指南

    cp from : https://www.jianshu.com/p/6a45e2dfc9d9 万恶的根源 距离React Router v4 正式发布也已经过去三个月了,这周把一个React的架子 ...

  5. 【转】windows下mongodb安装与使用整理

    转自 :http://www.cnblogs.com/lecaf/archive/2013/08/23/mongodb.html 一.首先安装mongodb 1.下载地址:http://www.mon ...

  6. JAVA中String.format的用法 转16进制,还可以补0

    1.对整数进行格式化:%[index$][标识][最小宽度]转换方式        我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解, ...

  7. CF 329A(Purification-贪心-非DLX)

    A. Purification time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  8. ARM、X86/Atom、MIPS、PowerPC

    关注Android的时候,有一些CPU架构方面的术语知识,主要有:ARM.X86/Atom.MIPS.PowerPC1)ARM/MIPS/PowerPC均是基于精简指令集(RISC,Reduced I ...

  9. NLP系列(4)_朴素贝叶斯实战与进阶(转)

    http://blog.csdn.net/han_xiaoyang/article/details/50629608 作者: 寒小阳 && 龙心尘 时间:2016年2月. 出处:htt ...

  10. List 集合的交集

    private void Test() { List<string> lsA = new List<string>(); lsA.Add("A"); lsA ...