时间:2021-05-20
复制代码 代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXLEN 10240
void usage();
int main(int argc,char *argv[])
{
int count,packetLength,dataLength,olddataLength,datasum,line,remainder,*Length;
char *FILENAME,*OUTNAME;
char int2char[10];
unsigned char buffer[MAXLEN];
FILE *INFILE,*OUTFILE;
//获取输入的参数
if(argc == 1)
FILENAME="UPDATE.APP";
else
FILENAME=argv[1];
//用二进制打开输入文件
if((INFILE = fopen(FILENAME, "rb")) == NULL) usage();
//创建文件夹并进入目录
mkdir("output");
chdir("output");
//跳过92空字节
fseek(INFILE, 92, 0);
for(count=1;INFILE != NULL;count++)
{
//判断是否为华为固件索引头
fread(buffer, 4, 1, INFILE);
if(buffer[0] != 0x55) break;
if(buffer[1] != 0XAA) break;
if(buffer[2] != 0x5A) break;
if(buffer[3] != 0xA5) break;
//获取头文件长度
fread(buffer, 4, 1, INFILE);
Length = (int *)buffer;
packetLength=*Length;
//跳过16字节
fseek(INFILE, 16, 1);
//获取内容长度
fread(buffer, 4, 1, INFILE);
Length = (int *) buffer;
dataLength=*Length;
//把整数和字符串连接并复制给文件名
itoa(count, int2char, 10);
OUTNAME=strcat(int2char, ".img");
//跳到头文件末尾
fseek(INFILE, packetLength-28, 1);
//创建文件
if((OUTFILE = fopen(OUTNAME, "wb")) == NULL)
{
printf("Unrecognised file format. Wrong identifier.\n");
return -1;
} else printf("Extracted output/%s\n",OUTNAME);
//把内容数据分成多个部分
datasum=dataLength/MAXLEN;
for(line=0;line <= datasum;line++)
{
//获取内容数据
if(datasum == line)
fread(buffer, dataLength % MAXLEN, 1, INFILE);
else
fread(buffer, MAXLEN, 1, INFILE);
//输出文件
if(datasum == line)
fwrite(buffer, dataLength % MAXLEN, 1, OUTFILE);
else
fwrite(buffer, MAXLEN, 1, OUTFILE);
}
//关闭输出文件
fclose(OUTFILE);
//指针取整,4的倍数
remainder = 4 - (ftell(INFILE) % 4);
if (remainder < 4)
{
//进行填充剩余的字节
fseek(INFILE, remainder, 1);
}
}
//关闭输入文件
fclose(INFILE);
return 0;
}
void usage()
{
//帮助函数
printf("uasge: unpack_update.exe [UPDATE.APP|UPDATA.APP]\n");
exit(0);
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1、根据手机类型,到对应官网上去下载原版固件包。在此以华为C8812为例进行讲解。首先在官网上搜索并下载与当前手机相匹配的固件包。2、固件包下载完成后,将其解压
本文实例讲述了C#实现的文件压缩和解压缩类。分享给大家供大家参考。具体分析如下:这个C#代码包含了几个类,封装了文件压缩和解压缩常用的方法,包括直接通过代码进行
本文实例为大家分享了C#实现文件的压缩与解压的具体代码,供大家参考,具体内容如下需引入System.IO.Compression;1.C#代码(入门案例)Con
本文实例展示了C语言循环结构与时间函数用法,对于C语言的学习来说是非常不错的参考借鉴材料。分享给大家供大家参考之用。具体如下:完整实例代码如下:/*******
数据结构C语言实现循环单链表的实例实例代码://=========杨鑫========================////循环单链表的实现#include#