打包解包

#include "stdafx.h"
#include "iostream"
#include "fstream"
#include <string.h>
using std::fstream;
using std::ios;
using std::string;

struct index
{
    size_t offset;//文件偏移量
    size_t FillSize;//文件大小
    size_t namelength;//文件名长度
    char *pName;//文件名
};

//打包
void packFile(char* fileName[], size_t fillNum){
    size_t fillTableSize = 0;//文件索引表大小
    fstream srcFile;
    fillTableSize += 4;//保存索引表大小
    fillTableSize += 4;//保存文件数目
    index *pFillDate = new index[fillNum];
    for (size_t i = 0; i < fillNum; i++)
    {
        //得到所有图片的偏移量
        if (i>0)
        {
            (pFillDate + i)->offset = (pFillDate + i - 1)->offset + (pFillDate + i - 1)->FillSize;
        }
        else
        {
            (pFillDate + i)->offset = 0;//i == 0,偏移量为0
        }
        fillTableSize += 4;        
        //得到所有图片的大小
        srcFile.open(fileName[i], ios::in | ios::binary);
        srcFile.seekp(0, ios::end);
        (pFillDate + i)->FillSize = (size_t)srcFile.tellp();
        srcFile.close();
        fillTableSize += 4;
        //得到所有文件名长度
        (pFillDate + i)->namelength = strlen(fileName[i]);
        fillTableSize += 4;
        //得到所有文件名
        (pFillDate + i)->pName = new char[(pFillDate + i)->namelength + 1];
        strcpy_s((pFillDate + i)->pName, (pFillDate + i)->namelength + 1, fileName[i]);
        fillTableSize += (pFillDate + i)->namelength;
    }
    fstream destFile;//目标文件,最后打包的文件
    //写入文件打包
    destFile.open("ImageFill.pak", ios::out | ios::binary);
    destFile.write((char*)&fillTableSize, sizeof(size_t));//先写入文件索引表的大小
    destFile.write((char*)&fillNum, sizeof(size_t));//再写入文件数目
    //写入索引表的内容
    for (size_t i = 0; i < fillNum; i++)
    {
        destFile.write((char*)&(pFillDate + i)->offset, sizeof(size_t));
        destFile.write((char*)&(pFillDate + i)->FillSize, sizeof(size_t));
        destFile.write((char*)&(pFillDate + i)->namelength, sizeof(size_t));
        destFile.write((pFillDate + i)->pName, sizeof(char)*(pFillDate + i)->namelength);
    }
    
    //再接下来一个一个文件往后写入
    for (size_t i = 0; i < fillNum; i++)
    {
        srcFile.open((pFillDate + i)->pName, ios::in | ios::binary);
        for (size_t j = 0; j < (pFillDate + i)->FillSize; j++)
        {
            destFile.put(srcFile.get());
        }
        srcFile.close();
    }
    destFile.close();
    for (size_t i = 0; i < fillNum; i++)
        delete[](pFillDate + i)->pName;
    delete[]pFillDate;
}

//解包

void breakFile(){
    fstream srcFile;
    fstream destFile;
    srcFile.open("ImageFill.pak", ios::in | ios::binary);
    //解压索引表
    size_t fillTableSize = 0;
    srcFile.read((char*)&fillTableSize, sizeof(size_t));
    size_t fillNum = 0;
    srcFile.read((char*)&fillNum, sizeof(size_t));
    index *pFillDate = new index[fillNum];
    for (size_t i = 0; i < fillNum; i++)
    {
        srcFile.read((char*)&(pFillDate + i)->offset, sizeof(size_t));
        srcFile.read((char*)&(pFillDate + i)->FillSize, sizeof(size_t));
        srcFile.read((char*)&(pFillDate + i)->namelength, sizeof(size_t));
        (pFillDate + i)->pName = new char[(pFillDate + i)->namelength + 1];
        memset((pFillDate + i)->pName, 0, sizeof(char)*((pFillDate + i)->namelength + 1));
        srcFile.read((pFillDate + i)->pName, sizeof(char)*(pFillDate + i)->namelength);
    }
    //解压图片文件
    for (size_t i = 0; i < fillNum; i++)
    {
        char tempName[128] = {};
        strcpy_s(tempName, "abc");
        strcat_s(tempName, (pFillDate + i)->pName);//每个解包图片文件名连接abc
        destFile.open(tempName, ios::out | ios::binary);
        srcFile.seekp(fillTableSize + (pFillDate + i)->offset, SEEK_SET);
        for (size_t j = 0; j < (pFillDate + i)->FillSize; j++)
        {
            destFile.put(srcFile.get());
        }
        destFile.close();
    }
    for (size_t i = 0; i < fillNum; i++)
        delete[](pFillDate + i)->pName;
    delete[]pFillDate;
    srcFile.close();
}
 

MTK Android打包解包工具是一种用于处理MTK(联发科技)芯片型号的Android系统的工具。MTK芯片广泛用于各种智能手机和平板电脑中。 打包解包工具可以用来修改和处理Android系统的各个部分,包括系统镜像、程序文件、资源文件等。使用该工具,可以解包系统镜像文件,以获取其中的各个组件,比如boot.img、recovery.img和system.img等。然后可以对这些组件进行修改、替换或添加,最后再重新打包成一个完整的系统镜像文件。 MTK Android打包解包工具的主要功能包括以下几个方面: 1. 解包系统镜像文件:通过该工具,可以将MTK Android系统镜像文件进行解包,获取其中的各个组件,以便进行修改和处理。 2. 修改系统组件:对解包后的各个组件,可以进行修改和处理操作。比如可以修改系统内核、修改系统配置文件、替换应用程序等。 3. 添加第三方组件:除了对原有组件的修改,还可以添加第三方应用程序和库文件等。这样可以增加系统的功能和扩展性。 4. 重新打包系统镜像文件:修改和添加操作完成后,可以使用该工具重新打包成一个完整的系统镜像文件。然后可以将该镜像文件刷入MTK设备,以实现修改后的系统。 总之,MTK Android打包解包工具是一种强大的工具,可以对MTK芯片的Android系统进行深度定制和优化。通过对系统镜像文件的解包和重新打包,可以进行各种修改和添加操作,以满足用户的个性化需求和特殊要求。这对于开发者和定制者来说,是一种非常有用和方便的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值