資源簡介
基于Huffman樹的文件壓縮C源碼,支持大文件邊讀取邊壓縮。

代碼片段和文件信息
//進行文件解壓。? 。。。。?
#include?“../HuffmanTree.h“
#define?NAMESIZE?500
void?rezip(const?char*s)
{
//s 為壓縮文件的地址和文件名。?
printf(“進行文件解壓\n“);
FILE*pr*pw;
int?ai=0jn=256m=2*n-1;UInt32?w[256];
HuffmanCode?HChc;HuffmanTree?HT;
char?rezipname[NAMESIZE]=“re“;
i=0;
while(s[i]!=‘.‘){rezipname[2+i]=s[i];i++;}
rezipname[2+i]=‘.‘;i++;
pr=fopen(s“rb“);
if(!pr){
printf(“文件打開失敗!“);exit(1);
}
j=0;a=fgetc(pr);
while(j<4){
rezipname[2+i]=a;if(j<3)a=fgetc(pr);j++;i++;
}
HT=(HuffmanTree)malloc(sizeof(HTNode)*(m+1));
HT[0].weight=0;HT[0].parent=0;HT[0].lchild=0;HT[0].rchild=0;
for(i=1;i<=n;i++){
HT[i].weight=0;//此時不需要權重,所以可以隨便賦值。?
HT[i].lchild=0;
HT[i].rchild=0;
}
for(i=n+1;i<=m;i++)
{
HT[i].weight=0;//此時不需要權重,所以可以隨便賦值。?
fread(&a21pr);HT[i].lchild=a;HT[a].parent=i;
fread(&a21pr);HT[i].rchild=a;HT[a].parent=i;
}
HT[m].parent=0;
//此時HT為霍夫曼樹,?
int?gm=0;
char?aa[80000]b[8];int?x[10000]d;a=fgetc(pr);
/*aa和b先開辟一定的內存空間。先將文件寫到內存里?然后再寫到文件里。?所以只能解壓比較小的文件。?*/
while(!feof(pr))
{
for(int?i=0;i<8;i++){
if(a){b[7-i]=48+a%2;a=a/2;}
else?b[7-i]=‘0‘;
}
for(int?i=0;i<8;i++)
aa[8*j+i]=b[i];
j++;d=a;
a=fgetc(pr);
}
for(i=0;i<8;i++)if(a){b[7-i]=48+a%2;a=a/2;}else?break;
for(int?k=0;k aa[8*j-8+k]=b[8-i+k];
// for(;i<7;i++)aa[8*j-8+i]=‘0‘;
aa[8*j-8+i]=‘0‘;aa[8*j-8+i+1]=‘#‘;
//下面將aa所存的編碼解密?
Rewin(HTaaxngm);
FILE?*fw;
fw=fopen(rezipname“wb“);
for(int?i=0;i {x[i]=x[i]-1;fwrite(x+i11fw);}
fclose(fw);fclose(pr);
printf(“解壓成功!\n“);
}
int?main()
{
const?char*str2=“zip123.txt“;
rezip(str2);
return?0;?
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3433??2015-11-16?17:23??HuffmanZip\HuffmanTree.h
?????文件???????1823??2015-11-24?19:32??HuffmanZip\unzip_2.cpp
?????文件???????3148??2015-11-24?19:32??HuffmanZip\zip_2.cpp
?????目錄??????????0??2017-07-14?22:39??HuffmanZip
-----------?---------??----------?-----??----
?????????????????8404????????????????????4
- 上一篇:避障小車原理圖
- 下一篇:國科大模式識別與機器學習考題總結(詳細答案)
評論
共有 條評論