此模块执行python值与表示为python字节字符串的c位字段结构之间的转换。

bitstruct的Python项目详细描述


buildstatuscoverage

关于

这个模块的目的是要有一个类似于python的接口 结构模块,但处理位而不是原始数据类型 (字符,整数,…)。

项目主页:https://github.com/eerimoq/bitstruct

文档:http://bitstruct.readthedocs.org/en/latest

安装

pipinstallbitstruct

示例用法

使用packingunpacking四个整数的基本示例 格式字符串'u1u3u4s16'

>>>frombitstructimport*>>>pack('u1u3u4s16',1,2,3,-4)b'\xa3\xff\xfc'>>>unpack('u1u3u4s16',b'\xa3\xff\xfc')(1,2,3,-4)>>>calcsize('u1u3u4s16')24

一个示例compiling格式化字符串一次,并使用它来pack 以及unpack数据:

>>>importbitstruct>>>cf=bitstruct.compile('u1u3u4s16')>>>cf.pack(1,2,3,-4)b'\xa3\xff\xfc'>>>cf.unpack(b'\xa3\xff\xfc')(1,2,3,-4)

使用pack intounpack from函数打包/解包 数据中位偏移量的值,在本例中为位偏移量 是5:

>>>frombitstructimport*>>>data=bytearray(b'\x00\x00\x00\x00')>>>pack_into('u1u3u4s16',data,5,1,2,3,-4)>>>databytearray(b'\x05\x1f\xff\xe0')>>>unpack_from('u1u3u4s16',data,5)(1,2,3,-4)

可以通过将解包值赋给变量或 将结果包装为命名元组:

>>>frombitstructimport*>>>fromcollectionsimportnamedtuple>>>MyName=namedtuple('myname',['a','b','c','d'])>>>unpacked=unpack('u1u3u4s16',b'\xa3\xff\xfc')>>>myname=MyName(*unpacked)>>>mynamemyname(a=1,b=2,c=3,d=-4)>>>myname.c3

使用pack_dictunpack_dict函数打包/解包 词典中的值:

>>>frombitstructimport*>>>names=['a','b','c','d']>>>pack_dict('u1u3u4s16',names,{'a':1,'b':2,'c':3,'d':-4})b'\xa3\xff\xfc'>>>unpack_dict('u1u3u4s16',names,b'\xa3\xff\xfc'){'a':1,'b':2,'c':3,'d':-4}

无符号整数packingunpacking的示例 有符号整数、浮点数、布尔值、字节字符串和字符串:

>>>frombitstructimport*>>>pack('u5s5f32b1r13t40',1,-1,3.75,True,b'\xff\xff','hello')b'\x0f\xd0\x1c\x00\x00?\xffhello'>>>unpack('u5s5f32b1r13t40',b'\x0f\xd0\x1c\x00\x00?\xffhello')(1,-1,3.75,True,b'\xff\xf8','hello')>>>calcsize('u5s5f32b1r13t40')96

与上一个示例中的格式字符串和值相同,但是 首先使用lsb(最低有效位)而不是默认的msb (最高有效位)第一个:

>>>frombitstructimport*>>>pack('<u5s5f32b1r13t40',1,-1,3.75,True,b'\xff\xff','hello')b'\x87\xc0\x00\x03\x80\xbf\xff\xf666\xa6\x16'>>>unpack('<u5s5f32b1r13t40',b'\x87\xc0\x00\x03\x80\xbf\xff\xf666\xa6\x16')(1,-1,3.75,True,b'\xff\xf8','hello')>>>calcsize('<u5s5f32b1r13t40')96

十六进制字符串和二进制文件中unpacking值的示例:

>>>frombitstructimport*>>>frombinasciiimportunhexlify>>>unpack('s17s13r24',unhexlify('0123456789abcdef'))(582,-3751,b'\xe2j\xf3')>>>withopen("test.bin","rb")asfin:...unpack('s17s13r24',fin.read(8))......(582,-3751,b'\xe2j\xf3')

byteswap更改数据的endianness,然后解压 值:

>>>frombitstructimport*>>>packed=pack('u1u3u4s16',1,2,3,1)>>>unpack('u1u3u4s16',byteswap('12',packed))(1,2,3,256)

贡献

  1. 分叉存储库。

  2. 安装必备组件。

    pip install -r requirements.txt
    
  3. 实现新功能或错误修复。

  4. 实施测试用例以确保将来的更改不会中断 遗产。

  5. 运行测试。

    make test
    
  6. 创建拉取请求。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用split函数分割字符串,但没有得到期望的结果   未找到包含derby数据库嵌入架构的sql Java桌面应用程序错误   java elasticsearch vs solr用于定制全文搜索系统   java Android:创建没有startOffset的动画延迟?   java如何查看其他应用程序接收的数据?   java如何在Linux中使用D和classpath选项运行jar文件   java和域设计最佳实践   具有相同内存位置的java数组,将显示为输出   连接到java中的elasticsearch?   Java Playframework重定向到带有Json负载的外部url   java无法在Android平台上使用InputStream为蓝牙socket创建ObjectInputStream   使用POI将Excel日期转换为Java日期,年份未正确显示   oracle从数据库层还是Java层调用webservice?