c++结构体的二进制文件,python如何解析
场景分析
- 现有如下场景:有一个二进制文件需要解析成可读数据
- 已知条件:该文件符合c++结构体对应的结构体数据,因此我们可以通过结构体中所占用的字节数来进行解析
- 需要工具:
*python的模块struct
*c++结构体对应的数据类型
python struct模块介绍
函数 | 返回值 | 解析 |
---|
pack(fmt,v1,v2…) | string | 按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回. |
pack_into(fmt,buffer,offset,v1,v2…) | None | 按照给定的格式(fmt),将数据转换成字符串(字节流),并将字节流写入以offset开始的buffer中.(buffer为可写的缓冲区,可用array模块) |
unpack(fmt,v1,v2……) | tuple | 按照给定的格式(fmt)解析字节流,并返回解析结果 |
pack_from(fmt,buffer,offset) | tuple | 按照给定的格式(fmt)解析以offset开始的缓冲区,并返回解析结果 |
calcsize(fmt) | size of fmt | 计算给定的格式(fmt)占用多少字节的内存,注意对齐方式 |
格式符 | c++类型 |
---|
x | pad byte(填充字节) |
c | char |
b | signed char |
B | unsigned char |
? | _Bool |
h | short |
H | unsigned short |
i | int |
I(大写i) | unsigned int |
l(小写L) | long |
L | unsigned long |
q | long long |
Q | unsigned long long |
f | float |
d | double |
s | char[] |
p | char[] |
P | void * |
例子:以下为c++对应数据以及相应的类型,及结构体定义,现有一个test.dat文件按照下面结构体进行数据存储
名称 | 值 | 类型 |
---|
id | 1 | int |
age | 18 | int |
num | 4 | short |
name | j | char |
typedef struct
{
int id;
int age;
short num;
char name;
} test;
python脚本
import struct
binFile = open(file_path, 'rb')
context= binFile.read()
fm = "2ihc"
real_content = struct.unpack_from(fm, context, 0)
print(real_context)
输出(tuple):(1, 18, 4, 'j')
由此即可解析出二进制文件中的数据
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)