python模块介绍- binascii 二进制和ASCII转换
python模块介绍-binascii二进制和ASCII转换
目录
项目简介
Python中文库https://bitbucket.org/xurongzhong/python-chinese-library主要基于个人的使用经验,收集一些重要的外部和内部模块的中文教程和实例。发起人是ouyangchongwu#gmail.com,xurongzhong#gmail.com。
欢迎大家加入分享经验。联系方法:xurongzhong#gmail.com,微博:http://weibo.com/cizhenshi,python及测试开发qq群1:113938272,群2:6089740。
文件下载:
1, https://bitbucket.org/xurongzhong/python-chinese-library/downloads。 推荐
2, hg clone克隆所有文件 hg clone https://bitbucket.org/xurongzhong/python-chinese-library。
3, https://bitbucket.org/xurongzhong/python-chinese-library/src浏览文件,右键点击文件,选另存为下载。
Bug 提交:https://bitbucket.org/xurongzhong/python-chinese-library/issuest。
版本管理
版本号 |
修订发布时间 |
修订人 |
备注 |
V1.0 |
2013-12-12 |
Ouyangchongwu#gmail.com |
初始版本, 由Effbot库参考和http://docs.python.org/2.7/library/time.html生成。 |
参考资料:
官方网址: http://docs.python.org/2.7/library/time.html
Effbot库参考:http://effbot.org/librarybook/
简介:
功能:时间访问和转换。
月下载量:
Python版本:Python 1.4以上。
当前版本:
下载地址:
平台:跨平台
相关模块:
base64标准模块。
binhex标准模块。
uu 标准模块。
quopri 标准模块。
binascii模块包含很多用来方法来转换二进制和各种ASCII编码的二进制表示法。通常不直接使用这些功能,而是使用封装模块,如uu, base64或binhex。binascii模块包含用C语言编写更快的低级功能,通常为高级模块所使用。
Uu编码
uu编码格式现在已经比较少使用(http://zh.wikipedia.org/wiki/Uuencode),相关函数binascii.a2b_uu(string)和binascii.b2a_uu(data)这里不做介绍。
更多资料参见:http://docs.python.org/2/library/uu.html
Binhex编码
Binhex用于Macintosh平台。这里暂不做介绍。相关函数有:binascii.rledecode_hqx(data),binascii.rlecode_hqx(data),binascii.b2a_hqx(data),binascii.crc_hqx(data,crc)。
更多资料参见:http://docs.python.org/2/library/binhex.html
Base64编码
binascii.a2b_base64(string):转换的base64数据块为二进制,并返回二进制数据。一次可以传递多行。和base64.b64decode对应。
binascii.b2a_base64(data):转换二进制数据为一行base64编码的ASCII字符。返回字符串包含换行符。根据base64的标准data的长度最大为57。和base64.b64encode对应。
更多资料参见:http://docs.python.org/2/library/base64.html
QP码
Quoted-printable,或QPencoding,没有规范的中文译名,可译为“可打印字符引用编码”、“使用可打印字符的编码”。Quoted-printable是使用可打印的ASCII字符 (如字母、数字与"=")表示各种编码格式下的字符,以便能在7-bit数据通路上传输8-bit数据, 或者更一般地说在非8-bitclean媒体上正确处理数据。这被定义为MIMEcontent 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("helloworld")
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 returnvalue is in the range [-2**31, 2**31-1] regardless of platform. In the past thevalue 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 returnvalue 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'
其他实例
http://effbot.org/librarybook/binascii.htm有如下实例:
import binascii
text = "hello, mrsteal"
data = binascii.b2a_base64(text)
text = binascii.a2b_base64(data)
print text, "<=>", repr(data)
data = binascii.b2a_uu(text)
text = binascii.a2b_uu(data)
print text, "<=>", repr(data)
data = binascii.b2a_hqx(text)
text ]
print text, "<=>", repr(data)
# 2.0 and newer
data = binascii.b2a_hex(text)
text = binascii.a2b_hex(data)
print text, "<=>", repr(data)
执行结果:
# python test.py
hello, mrs teal <=> 'aGVsbG8sIG1ycyB0ZWFs\n'
hello, mrs teal <=>'/:&5L;&\\L(&UR<R!T96%L\n'
hello, mrs teal <=> 'D\'9XE\'mX)\'ebFb"dC@&X'
hello, mrs teal <=> '68656c6c6f2c206d7273207465616c'
另外单元测试的代码也可供参考:http://svn.python.org/projects/python/branches/tarek_sysconfig/Lib/test/test_binascii.py
python模块介绍- binascii 二进制和ASCII转换的更多相关文章
- python模块介绍- binascii:二进制和ASCII互转以及其他进制转换
20.1 binascii:二进制和ASCII互转作用:二进制和ASCII互相转换. Python版本:1.5及以后版本 binascii模块包含很多在二进制和ASCII编码的二进制表示转换的方法.通 ...
- python模块介绍- xlwt 创建xls文件(excel)
python模块介绍- xlwt 创建xls文件(excel) 2013-06-24磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 ...
- python模块介绍- HTMLParser 简单的HTML和XHTML解析器
python模块介绍- HTMLParser 简单的HTML和XHTML解析器 2013-09-11 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq ...
- python模块介绍- multi-mechanize 性能测试工具
python模块介绍- multi-mechanize 性能测试工具 2013-09-13 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 3739 ...
- python模块介绍-locustio:性能测试工具locustio
转自:http://automationtesting.sinaapp.com/blog/m_locustio_doc python测试文章 http://weibo.com/cizhenshi?is ...
- python成长之路【第十八篇】:python模块介绍、模块导入和重载
一.模块和命名空间 一般来说,Python程序往往由多个模块文件构成,通过import语句连接在一起.每个模块文件是一个独立完备的变量包,即一个命名空间.一个模块文件不能看到其他文件定义的变量名,除非 ...
- python模块介绍二。
全局变量 全局变量 python在一个.py文件内部自动添加了一些全局变量 print(vars()) #查看当前的全局变量 执行结果: {'__package__': None, '__loader ...
- python模块介绍- SocketServer 网络服务框架
来源:https://my.oschina.net/u/1433482/blog/190612 摘要: SocketServer简化了网络服务器的编写.它有4个类:TCPServer,UDPServe ...
- Python—模块介绍
什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码 ...
随机推荐
- windows phone:使用sqlite-net
继上篇文章后,这里简单介绍下sqlite-net的使用(示例不为作者所写,摘自于:https://github.com/peterhuene/sqlite-net) Please consult th ...
- Python重写C语言程序100例--Part9
''' [程序71] 题目:编写input()和output()函数输入,输出5个学生的数据记录. 1.程序分析: 2.程序源码: 使用list来模拟结构(不使用class) stu = [strin ...
- iOS 日历控件
近期需要写一个交互有点DT的日历控件,具体交互细节这里略过不表. 不过再怎么复杂的控件,也是由基础的零配件组装起来的,这里最基本的就是日历控件. 先上图: 从图中可以看出日历控件就是由一个个小方块组成 ...
- Python之路Day10
本节主要内容:memcache&redis.RabbitMQ.twisted框架 1. memcache&redis 1.1 memcache Memcached 是一个高性能的分布式 ...
- ZOJ 1893 A Multiplication Game 【简单博弈】
感觉ZJU上有不少博弈的题目. 这道题目还是比较好理解的,题目大概意思是:两人轮流乘一个2-9的数,从1开始乘,求谁的乘积先大于N. 还是寻找必败点必胜点,不过在这个题目里转换成了寻找必败区间必胜区间 ...
- HDU 3899 简单树形DP
题意:一棵树,给出每个点的权值和每条边的长度, 点j到点i的代价为点j的权值乘以连接i和j的边的长度.求点x使得所有点到点x的代价最小,输出 虽然还是不太懂树形DP是什么意思,先把代码贴出来把. 这道 ...
- POJ2069 最小球体覆盖, 模拟退火
只是套了个模板,模拟退火具体的过程真心不懂阿 //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #in ...
- Clojure学习:表达式与函数
Clojure是一门Lisp方言——确切地说,是一门JVM上的Lisp方言——也是一门非纯粹的函数式语言. Clojure理所当然地秉承了Lisp“代码即数据( code is data! )”的设计 ...
- [置顶] 如何判断两个IP大小关系及是否在同一个网段中
功能点 判断某个IP地址是否合法 判断两个IP地址是否在同一个网段中 判断两个IP地址的大小关系 知识准备 IP协议 子网掩码 Java 正则表达式 基本原理 IP地址范围 0.0.0.0- 255 ...
- 当webview遇到了Slidingmenu,webView出现卡白,解决方案
先介绍一下什么是SlidingMenu: Sliding Menu的是一种比较新的设置界面或配置界面效果,在主界面左滑或者右滑出现设置界面,能方便的进行各种操作.如Evernote.Google+.F ...