當前位置:首頁 » 文件管理 » 解壓縮程序

解壓縮程序

發布時間: 2022-02-05 00:19:47

㈠ (20分)用C語言編譯的文件壓縮解壓縮程序

是用霍夫曼樹做的
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
struct head
{
unsigned char b; /*the charactor*/
long count; /*the frequency*/
long parent,lch,rch; /*make a tree*/
char bits[256]; /*the haffuman code*/
}
header[512],tmp;

void compress()
{
char filename[255],outputfile[255],buf[512];
unsigned char c;
long i,j,m,n,f;
long min1,pt1,flength;
FILE *ifp,*ofp;
printf("source filename:");
gets(filename);
ifp=fopen(filename,"rb");
if(ifp==NULL)
{
printf("source file open error!\n");
return;
}
printf("destination filename:");
gets(outputfile);
ofp=fopen(outputfile,"wb");
if(ofp==NULL)
{
printf("destination file open error!\n");
return;
}
flength=0;
while(!feof(ifp))
{
fread(&c,1,1,ifp);
header[c].count++;
flength++;
}
flength--;
header[c].count--;
for(i=0;i<512;i++)
{
if(header[i].count!=0) header[i].b=(unsigned char)i;
else header[i].b=0;
header[i].parent=-1;
header[i].lch=header[i].rch=-1;
}
for(i=0;i<256;i++)
{
for(j=i+1;j<256;j++)
{
if(header[i].count<header[j].count)
{
tmp=header[i];
header[i]=header[j];
header[j]=tmp;
}
}
}
for(i=0;i<256;i++) if(header[i].count==0) break;
n=i;
m=2*n-1;
for(i=n;i<m;i++)
{
min1=999999999;
for(j=0;j<i;j++)
{
if(header[j].parent!=-1) continue;
if(min1>header[j].count)
{
pt1=j;
min1=header[j].count;
continue;
}
}
header[i].count=header[pt1].count;
header[pt1].parent=i;
header[i].lch=pt1;
min1=999999999;
for(j=0;j<i;j++)
{
if(header[j].parent!=-1) continue;
if(min1>header[j].count)
{
pt1=j;
min1=header[j].count;
continue;
}
}
header[i].count+=header[pt1].count;
header[i].rch=pt1;
header[pt1].parent=i;
}
for(i=0;i<n;i++)
{
f=i;
header[i].bits[0]=0;
while(header[f].parent!=-1)
{
j=f;
f=header[f].parent;
if(header[f].lch==j)
{
j=strlen(header[i].bits);
memmove(header[i].bits+1,header[i].bits,j+1);
header[i].bits[0]='0';
}
else
{
j=strlen(header[i].bits);
memmove(header[i].bits+1,header[i].bits,j+1);
header[i].bits[0]='1';
}
}
}
fseek(ifp,0,SEEK_SET);
fwrite(&flength,sizeof(int),1,ofp);
fseek(ofp,8,SEEK_SET);
buf[0]=0;
f=0;
pt1=8;
while(!feof(ifp))
{
c=fgetc(ifp);
f++;
for(i=0;i<n;i++)
{
if(c==header[i].b) break;
}
strcat(buf,header[i].bits);
j=strlen(buf);
c=0;
while(j>=8)
{
for(i=0;i<8;i++)
{
if(buf[i]=='1') c=(c<<1)|1;
else c=c<<1;
}
fwrite(&c,1,1,ofp);
pt1++;
strcpy(buf,buf+8);
j=strlen(buf);
}
if(f==flength) break;
}
if(j>0)
{
strcat(buf,"00000000");
for(i=0;i<8;i++)
{
if(buf[i]=='1') c=(c<<1)|1;
else c=c<<1;
}
fwrite(&c,1,1,ofp);
pt1++;
}
fseek(ofp,4,SEEK_SET);
fwrite(&pt1,sizeof(long),1,ofp);
fseek(ofp,pt1,SEEK_SET);
fwrite(&n,sizeof(long),1,ofp);
for(i=0;i<n;i++)
{
fwrite(&(header[i].b),1,1,ofp);
c=strlen(header[i].bits);
fwrite(&c,1,1,ofp);
j=strlen(header[i].bits);
if(j%8!=0)
{
for(f=j%8;f<8;f++)
strcat(header[i].bits,"0");
}
while(header[i].bits[0]!=0)
{
c=0;
for(j=0;j<8;j++)
{
if(header[i].bits[j]=='1') c=(c<<1)|1;
else c=c<<1;
}
strcpy(header[i].bits,header[i].bits+8);
fwrite(&c,1,1,ofp);
}
}
fclose(ifp);
fclose(ofp);
printf("compress successfully!\n");
return;
}
void uncompress()
{
char filename[255],outputfile[255],buf[255],bx[255];
unsigned char c;
long i,j,m,n,f,p,l;
long flength;
FILE *ifp,*ofp;
printf("source filename:");
gets(filename);
ifp=fopen(filename,"rb");
if(ifp==NULL)
{
printf("source file open error!\n");
return;
}
printf("destination filename:");
gets(outputfile);
ofp=fopen(outputfile,"wb");
if(ofp==NULL)
{
printf("destination file open error!\n");
return;
}
fread(&flength,sizeof(long),1,ifp);
fread(&f,sizeof(long),1,ifp);
fseek(ifp,f,SEEK_SET);
fread(&n,sizeof(long),1,ifp);
for(i=0;i<n;i++)
{
fread(&header[i].b,1,1,ifp);
fread(&c,1,1,ifp);
p=(long)c;
header[i].count=p;
header[i].bits[0]=0;
if(p%8>0) m=p/8+1;
else m=p/8;
for(j=0;j<m;j++)
{
fread(&c,1,1,ifp);
f=c;
itoa(f,buf,2);
f=strlen(buf);
for(l=8;l>f;l--)
{
strcat(header[i].bits,"0");
}
strcat(header[i].bits,buf);
}
header[i].bits[p]=0;
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(strlen(header[i].bits)>strlen(header[j].bits))
{
tmp=header[i];
header[i]=header[j];
header[j]=tmp;
}
}
}
p=strlen(header[n-1].bits);
fseek(ifp,8,SEEK_SET);
m=0;
bx[0]=0;
while(1)
{
while(strlen(bx)<(unsigned int)p)
{
fread(&c,1,1,ifp);
f=c;
itoa(f,buf,2);
f=strlen(buf);
for(l=8;l>f;l--)
{
strcat(bx,"0");
}
strcat(bx,buf);
}
for(i=0;i<n;i++)
{
if(memcmp(header[i].bits,bx,header[i].count)==0) break;
}
strcpy(bx,bx+header[i].count);
c=header[i].b;
fwrite(&c,1,1,ofp);
m++;
if(m==flength) break;
}
fclose(ifp);
fclose(ofp);
printf("Uncompress successfully!\n");
return;
}
int main()
{
int c;
printf("1--Compress file\n");
printf("2--Uncompress file\n");
printf("Select 1 or 2:");
c=getch();
printf("%c\n",c);
if(c=='1') compress();
else if(c=='2') uncompress();
return 0;
}

㈡ 我的電腦突然沒有了解壓縮程序,該怎麼辦呢

電腦上的壓縮文件突然無法解壓和使用了,可能有兩個原因:

  1. 解壓縮軟體和壓縮軟體之間的文件關聯被錯誤修改或者被其他程序篡改。點擊」開始「菜單,查看電腦上安裝的壓縮軟體是否還在。如果能找到,運行它並修復文件關聯即可正常打開壓縮文件。以WinRAR為例,運行後點擊」選項「->」設置「菜單,在彈出的設置窗口按下圖勾選文件類型,點擊確定退出即可。

  2. 如果電腦上的壓縮軟體不存在了,可能是被意外卸載了。重新下載壓縮軟體並安裝即可使用。常用的壓縮軟體有WinRAR,WinZip,7-Zip等。

㈢ 解壓縮文件的程序在哪

安裝一下這個

WinRAR 3.71 簡體中文正式版
http://www.skycn.com/soft/3475.html

㈣ 什麼叫vids:dvsd解壓縮程序

跟播放軟體沒關系,是AVI的驅動沒裝,找個新點的IndeoVideo驅動裝上就可以了!

㈤ RAR解壓縮程序

就雙擊RAR文件,打開後,點[解壓縮到]就行了。
或者就對RAR文件按右鍵,點擊解壓縮到當前文件夾

當然,前提你是安裝了winrar程序。

㈥ 如何下載解壓縮軟體

(一)壓縮軟體有很多,功能都一樣,比如7z、WinRAR、好壓、等。


(二)下面以免費並且壓縮性能強大的7z為例,進行圖文說明:

(1)網路搜索「7z」,點擊進入「7z官方中文主頁」。如下圖:

㈦ 為什麼有些程序要解壓縮才能運行

暈,如果是RAR壓縮成EXE的肯定可以解壓的,如果是EXE安裝程序肯定要安裝的。

㈧ 怎樣解壓縮EXE文件

winrar可以做成自解壓文件(*.exe),只要是winrar做的自解壓文件都可以用winrar打開,

如果不是winrar做的應用程序的話,用winrar是打不開的 ,

具體可以用右鍵單擊應用程序,如果有「解壓倒...」「用winrar打開....」這樣的右鍵菜單,說明是由winrar做的自解壓文件,否則,winrar是打不開exe程序的

㈨ 怎樣解壓縮(zipped)文件夾

解壓縮(zipped)文件夾步驟如下:
1、
先安裝解壓軟體,滑鼠右鍵點擊需要解壓的文件夾。
2、後可以看到選項中的幾個解壓方式,有解壓文件(選擇後可自定義解壓的地方)、解壓到當前文件夾(這個是最常用的)、解壓到網路雲\(在該目錄下創建文件夾並解壓到該文件夾),選擇一種方式解壓即可:

㈩ 求助壓縮解壓縮程序源代碼

壓縮文件的基本原理是查找文件內的重復位元組,並建立一個相同位元組的"詞典"文件,並用一個代碼表示,比如在文件里有幾處有一個相同的詞"中華人民共和國"用一個代碼表示並寫入"詞典"文件,這樣就可以達到縮小文件的目的.
由於計算機處理的信息是以二進制數的形式表示的,因此壓縮軟體就是把二進制信息中相同的字元串以特殊字元標記來達到壓縮的目的。為了有助於理解文件壓縮,請您在腦海里想像一幅藍天白雲的圖片。對於成千上萬單調重復的藍色像點而言,與其一個一個定義「藍、藍、藍……」長長的一串顏色,還不如告訴電腦:「從這個位置開始存儲1117個藍色像點」來得簡潔,而且還能大大節約存儲空間。這是一個非常簡單的圖像壓縮的例子。其實,所有的計算機文件歸根結底都是以「1」和「0」的形式存儲的,和藍色像點一樣,只要通過合理的數學計算公式,文件的體積都能夠被大大壓縮以達到「數據無損稠密」的效果。總的來說,壓縮可以分為有損和無損壓縮兩種。如果丟失個別的數據不會造成太大的影響,這時忽略它們是個好主意,這就是有損壓縮。有損壓縮廣泛應用於動畫、聲音和圖像文件中,典型的代表就是影碟文件格式mpeg、音樂文件格式mp3和圖像文件格式jpg。但是更多情況下壓縮數據必須准確無誤,人們便設計出了無損壓縮格式,比如常見的zip、rar等。壓縮軟體(compression software)自然就是利用壓縮原理壓縮數據的工具,壓縮後所生成的文件稱為壓縮包(archive),體積只有原來的幾分之一甚至更小。當然,壓縮包已經是另一種文件格式了,如果你想使用其中的數據,首先得用壓縮軟體把數據還原,這個過程稱作解壓縮。常見的壓縮軟體有winzip、winrar等。
有兩種形式的重復存在於計算機數據中,zip就是對這兩種重復進行了壓縮。
一種是短語形式的重復,即三個位元組以上的重復,對於這種重復,zip用兩個數字:1.重復位置距當前壓縮位置的距離;2.重復的長度,來表示這個重復,假設這兩個數字各佔一個位元組,於是數據便得到了壓縮,這很容易理解。
一個位元組有 0 - 255 共 256 種可能的取值,三個位元組有 256 * 256 * 256 共一千六百多萬種可能的情況,更長的短語取值的可能情況以指數方式增長,出現重復的概率似乎極低,實則不然,各種類型的數據都有出現重復的傾向,一篇論文中,為數不多的術語傾向於重復出現;一篇小說,人名和地名會重復出現;一張上下漸變的背景圖片,水平方向上的像素會重復出現;程序的源文件中,語法關鍵字會重復出現(我們寫程序時,多少次前後、paste?),以幾十 K 為單位的非壓縮格式的數據中,傾向於大量出現短語式的重復。經過上面提到的方式進行壓縮後,短語式重復的傾向被完全破壞,所以在壓縮的結果上進行第二次短語式壓縮一般是沒有效果的。
第二種重復為單位元組的重復,一個位元組只有256種可能的取值,所以這種重復是必然的。其中,某些位元組出現次數可能較多,另一些則較少,在統計上有分布不均勻的傾向,這是容易理解的,比如一個 ASCII 文本文件中,某些符號可能很少用到,而字母和數字則使用較多,各字母的使用頻率也是不一樣的,據說字母 e 的使用概率最高;許多圖片呈現深色調或淺色調,深色(或淺色)的像素使用較多(這里順便提一下:png 圖片格式是一種無損壓縮,其核心演算法就是 zip 演算法,它和 zip 格式的文件的主要區別在於:作為一種圖片格式,它在文件頭處存放了圖片的大小、使用的顏色數等信息);上面提到的短語式壓縮的結果也有這種傾向:重復傾向於出現在離當前壓縮位置較近的地方,重復長度傾向於比較短(20位元組以內)。這樣,就有了壓縮的可能:給 256 種位元組取值重新編碼,使出現較多的位元組使用較短的編碼,出現較少的位元組使用較長的編碼,這樣一來,變短的位元組相對於變長的位元組更多,文件的總長度就會減少,並且,位元組使用比例越不均勻,壓縮比例就越大。

熱點內容
php添加文本框 發布:2024-10-22 19:08:08 瀏覽:483
oracle存儲過程定時執行 發布:2024-10-22 19:08:07 瀏覽:554
vbnet讀取資料庫數據 發布:2024-10-22 19:06:23 瀏覽:182
2012文件伺服器搭建 發布:2024-10-22 19:04:18 瀏覽:969
悅動悅目有哪些配置 發布:2024-10-22 18:54:53 瀏覽:660
BGL編譯器手冊 發布:2024-10-22 18:54:51 瀏覽:377
linux使用命令 發布:2024-10-22 18:45:43 瀏覽:253
演算法遞歸題 發布:2024-10-22 18:41:51 瀏覽:879
qq空間怎麼清除緩存 發布:2024-10-22 18:37:39 瀏覽:649
演算法開發板 發布:2024-10-22 18:23:54 瀏覽:190