由于工作的原因之前了解了一下python对于二进制的一些基础,但是一是没看懂, 二是又忘了。
最近又看了一下,总结出一点东西。
pythoh对二进制文件的操作离不开struct模块,该模块有两个基础接口:
pack()打包至二进制
help(struct.pack)
Help on built-in function pack in module _struct:
pack(...)
pack(fmt, v1, v2, ...) -> bytes
Return a bytes object containing the values v1, v2, ... packed according
to the format string fmt. See help(struct) for more on format strings.
umpack()从二进制解压
help(struct.unpack)
Help on built-in function unpack in module _struct:
unpack(...)
unpack(fmt, buffer) -> (v1, v2, ...)
Return a tuple containing values unpacked according to the format string
fmt. Requires len(buffer) == calcsize(fmt). See help(struct) for more
on format strings.
两个函数都能接受多个值,但是第一个参数需要与后面的值对应。
关于第一个参数fmt,基本同c语言对应,其类型和大小可以参考下表
同时fmt可以设定字节序
注:我理解的big-endian和little-endian分别为正序和倒序,以0x12345为例
big-endian:
地址: 低 ---------> 高
1 2 3 4 5
little-endian:
地址: 低 ---------> 高
5 4 3 2 1
同时也需要一些其他模块的配合,有人推荐ctypes模块和binascii模块,但是我看到有人使用array模块就可以了。
其中buf的初始化:
import array
buf = array.array('h', (0 for _ in range(size)))
buf可以储存字节数据