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); 
}