www.pudn.com > ch02.rar > rl_I_d.c
// 程式名稱:
rl_I_d.c
// 程式功能:
變動長度編碼壓縮之解壓縮
// 執行方式:
rl_I_d 壓縮檔名 資料檔名
// 程式說明:
1. 程式 rl_I_c.c 之解壓縮,參考2.4.1節 變動長度編碼法之改良一
// 2. 整數採用固定長度一個位元組表示法
// 3. 對於只出現一次的位元組 S,若 S < 128,則只輸出S,
// 否則輸出iS
#include
FILE *infile,*outfile;
int main(int argc,char *argv[])
{
switch(argc)
{
case 1 :
printf("無壓縮檔名!\n");
printf("執行方式為 C>rl_c 壓縮檔名 資料檔名\n");
exit(1);
break;
case 2:
printf("無資料檔名!\n");
printf("執行方式為 C>rl_c 壓縮檔名 資料檔名\n");
exit(1);
break;
case 3:
if ((infile = fopen(argv[1],"rb")) == NULL)
{
printf("無法開啟壓縮檔 %s !\n",argv[1]);
exit(1);
}
if ((outfile = fopen(argv[2],"wb")) == NULL)
{
printf("無法開啟資料檔 %s !\n",argv[2]);
exit(1);
}
}
d_runlength_I();
fclose(infile);
fclose(outfile);
return(0);
}
int d_runlength_I()
{
int i,S;
while ((i = fgetc(infile)) != EOF){
if (i < 128){
S = i;
fputc(S,outfile);
}
else {
i = i - 128;
S = fgetc(infile);
while (i != 0){
fputc(S,outfile);
i--;
}
}
}
return(0);
}