首页 > 编程语言 >python二机制文件解析

python二机制文件解析

时间:2022-11-08 16:13:43浏览次数:35  
标签:文件 name python segment seg file printf 解析 data

参考连接:https://blog.csdn.net/lovelyaiq/article/details/81988185

C语言解析:

#include "stdlib.h"
#include "stdio.h"

typedef unsigned int uint32_t;
typedef unsigned char uint8_t;

#define LESSON_INTERVAL_TRAIN_NUM        30

typedef enum {
    SPORT_SEGMENT_WARM_UP = 0,
    SPORT_SEGMENT_TRAIN,
    SPORT_SEGMENT_REST,
    SPORT_SEGMENT_RELAX
}SPORT_SEGMENT_TYPE_E;

typedef struct sport_segment_cell
{
    SPORT_SEGMENT_TYPE_E type;
    uint32_t start_timestamp;
}sport_segment_cell_t;

typedef struct sport_segment
{
    uint8_t seg_max;
    sport_segment_cell_t seg[LESSON_INTERVAL_TRAIN_NUM];
}sport_segment_t;

typedef struct core_segment
{
    uint32_t crc32;
    sport_segment_t data;
}core_segment;

int file_parse(const char* file_name)
{
    int size = 0;
    core_segment seg = {0};
    FILE *fp = fopen(file_name, "rb");

    if(NULL == fp)
    {
        printf("file::%s open failed\n", file_name);
        return -1;
    }

    size = fread(&seg, 1, sizeof(core_segment), fp);

    printf("size==%d, src ==%d\n", size, sizeof(core_segment));
    #if 1
    if(sizeof(core_segment) != size)
    {
        printf("read file failed size==%d\n", size);
        fclose(fp);
        return -1;
    }
    #endif

    printf("crc32==%lu\n", seg.crc32);
    printf("seg max==%d\n", seg.data.seg_max);

    for(int i = 0; i < seg.data.seg_max; i++)
    {
        printf("info [%d, %ld]\n", seg.data.seg[i].type, seg.data.seg[i].start_timestamp);
    }

    fclose(fp);

    //printf("core segment size==%d\n", sizeof(core_segment));
}

int main(int argc, char const *argv[])
{

    printf("%d\n", argc);

    for(int i = 0; i < argc; i++)
    {
        printf("%d,%s\n", i, argv[i]);
    }

    if(argc >= 2)
    {
        file_parse(argv[1]);
    }
    return 0;
}

对应的 python 代码如下:

import sys
import struct
import os

def file_pase(file_name):
    print('file_name==', file_name)
    try:
        f_src = open(file_name, 'rb')
        contents = f_src.read()
        offset = 0
        print(len(contents))
        #data = struct.unpack('62i', contents)
        data = struct.unpack_from('2I', contents, offset)
        print('data==', data)
        #'''
        #print(data[0],data[1])
        offset += 8
        max = data[1]
        for index in range(max):
            data = struct.unpack_from('2I', contents, offset)
            print(data[0],data[1])
            offset += 8
        #'''

        f_src.close()
    except ValueError as e:
        print('error:',e)
    pass
if __name__ == '__main__':
    print('Hello World! ', sys.argv)
    for i in sys.argv:
        #print(i)
        if '.seg' in i:
            file_pase(i)

 

标签:文件,name,python,segment,seg,file,printf,解析,data
From: https://www.cnblogs.com/zy-slient/p/16870054.html

相关文章

  • python获取程序执行文件路径方法
    python脚本打包成exe文件获取当前路径importosimportsys#确定应用程序是脚本文件还是被冻结的exeifgetattr(sys,'frozen',False):#获取应用程序exe的路径......
  • 01 向量与坐标 | 解析几何
    1.向量的概念与运算1.向量向量:既有大小又有方向的量叫做向量,或称矢量标量:只有大小(可用一个数值表示)向量的几何表示:有向线段\(\overrightarrow{P_1P_2}\)或者\(\vec......
  • python 如何打印函数名字?如何打印函数的注释?
    问题:python如何打印函数名字?如何打印函数的注释?解决:func_001.__name__ func_001.__doc__deffunc_001():'''函数的作用:打印输入:无......
  • Python工具箱系列(十三)
    上文介绍了使用AES算法进行文件加解密的代码。但是如果在代码中写死了(hardcode)文件名,每次要加解密文件都要去改python源代码,显然有些太笨了。为此,可以使用命令行参数来在......
  • python 检索网络
    importrequests,datetime,re,psutilimportscapy_http.httpashttpfromscapy.allimport*fromlxmlimportetreeimportwarningswarnings.filterwarnings("igno......
  • python 函数装饰器
    #函数传入的参数可以是函数deffunc1():print('1')deffunc2(func):#func为函数func()print('2')func2(func1)#12 deffunc1(func):......
  • 信呼v2.2.1文件上传漏洞复现
    前言:这个漏洞的复现呢也是借鉴了Y4tacker的博客(地址:https://blog.csdn.net/solitudi/article/details/118675321)环境配置:环境:win10phpamb下载地址:http://www.rockoa.c......
  • 30道TypeScript 面试问题解析
    英文|https://betterprogramming.pub/top-50-typescript-interview-questions-explained-5e69b73eeab1翻译|web前端开发TypeScript是Microsoft开发的JavaScript的开......
  • Python2调用xlwt库的报错:“UnicodeDecodeError: 'ascii' codec can't decode byte 0xe
    问题描述:Python2调用xlwt库的报错,报错提示“UnicodeDecodeError:'ascii'codeccan'tdecodebyte0xe5inposition0:ordinalnotinrange(128)”编码问题。 ......
  • python第三十课---面向对象的魔法方法,元类相关知识
    昨日内容回顾派生方法实战案例1.继承某个类2.重写被继承类里面的某个方法3.在方法内添加一些额外的操作4.最后利用super重新调用被继承类里面的方法"""super:子类......