此模块执行python值与表示为python字节字符串的c位字段结构之间的转换。
bitstruct的Python项目详细描述
安装
pipinstallbitstruct
示例用法
使用packing和unpacking四个整数的基本示例 格式字符串'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 into和unpack 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_dict和unpack_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}
无符号整数packing和unpacking的示例 有符号整数、浮点数、布尔值、字节字符串和字符串:
>>>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)
贡献
分叉存储库。
安装必备组件。
pip install -r requirements.txt
实现新功能或错误修复。
实施测试用例以确保将来的更改不会中断 遗产。
运行测试。
make test
创建拉取请求。