python操作二进制文件

由于工作的原因之前了解了一下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语言对应,其类型和大小可以参考下表

https://i-blog.csdnimg.cn/blog_migrate/631cd0b6607f69b82ccbe63193e1ab6b.png

 

同时fmt可以设定字节序

image

注:我理解的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可以储存字节数据

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值