此模块执行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文件分块,获取长度字节   java嵌入式Tomcat不执行jsf页面   java我的数据库中有2个实体,但hibernate返回其中6个。   java如何基于逗号拆分字符串   java取消已经运行的CompletableFutures的预期模式是什么   java如何在informix中从另一个数据库复制表ddl和数据   为什么图片是黑色的?   java根据字符串数组中的单词筛选列表   Java8的集合。平行流有效吗?   Kotlin中的java静态内部类   java如何在GUI中生成一列字符串   javafx如何正确使用高对比度主题?   带空格的javascript Httpurlconnection参数   java如何设置GridBagLayout的约束   java如何在一个线程可能尚未初始化时关闭另一个线程   java将简单时间格式转换为特殊时间格式(hhmmt)   安卓/java阵列重复过滤器的问题   java在队列的链接实现下,入队和出队是如何工作的   java更新sql外键约束