|
网站内容均来自网络,本站只提供信息平台,如有侵权请联系删除,谢谢!
在pyton中,通过模块来对二进制进行转换,主要包括两大类函数,即用于打包的pack和用于解包的unpack。
其中,的输入格式为- struct.pack(format, v1, v2, ...)
复制代码 ,其中为格式字符串,为将要转成的字符。
例如- >>> import struct
- >>> struct.pack('i', 15)
- b'\x0f\x00\x00\x00'
- >>> struct.pack('iii', 15, 16, 17)
- b'\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00'
- >>> struct.pack('b', 255) #b格式的取值范围是-128到127
- struct.error: byte format requires -128 <= number <= 127
- >>> struct.pack('B', 200)
- b'\xc8'
- >>> struct.pack('B', 71) #128以内可用ASCII表示
- b'G'
复制代码 代表,15对应的二进制代码为,故其输出为。当格式字符串为时,说明要将三个数字以整数类型转化为二进制。
其中,格式化字符串中的每个字符都代表一种数据类型,其中整型相关的字符如下,左侧为带符号整型,右侧为无符号整型
C语言类型 C语言类型标准大小signed charunsigned char1shortunsigned short2intunsigned int4longunsigned long4long longunsigned long long8ssize_tsize_t 其他类型
格式C 类型Python 类型标准大小填充字节无 char长度为1的字节串 _Boolbool1 float2floatfloat4doublefloat8char[]字节串 char[]字节串 void*整数 中提供了获取标准大小的函数,:- >>> struct.calcsize('B')
- 1
- >>> struct.calcsize('i')
- 4
复制代码 除了声明被格式化时的数据类型,还可以指定对齐方式,例如- >>> struct.pack("i",15)
- b'\x0f\x00\x00\x00'
- >>> struct.pack(">i",15) #小端序
- b'\x00\x00\x00\x0f'
- >>> struct.pack("<i",15) #大端序
- b'\x0f\x00\x00\x00'
复制代码 其对应字符的含义分别为
本机本机小端大端网络(大端)其中默认为,即本机字节顺序。
在熟悉了之后,与之对偶的也就没啥难度了- >>> test = struct.pack("III",125,1255,12555)>>> struct.unpack("III",test)(125, 1255, 12555)
复制代码 除了和,模块还提供了C语言风格的一对函数和,二者的声明分别为- struct.pack_into(format, buffer, offset, v1, v2, ...)
- struct.unpack_from(format, /, buffer, offset=0)
复制代码 其中表示缓冲流,在中,将以的偏置打包入中;在中,将中的数据从处依次取出。中封装了用于二进制处理的类,按照以往经验,其函数的实现方法很有可能是下面这种- def pack(format,*args):
- return Struct(format).pack(args)
复制代码 其中的初始化方法就是输入一个格式化字符串,例如- >>> s = struct.Struct("III")>>> s.pack(1,2,3)b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00'
复制代码 总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
免责声明
1. 本论坛所提供的信息均来自网络,本网站只提供平台服务,所有账号发表的言论与本网站无关。
2. 其他单位或个人在使用、转载或引用本文时,必须事先获得该帖子作者和本人的同意。
3. 本帖部分内容转载自其他媒体,但并不代表本人赞同其观点和对其真实性负责。
4. 如有侵权,请立即联系,本网站将及时删除相关内容。
|