2013-03-06 3 views
-5

Я пытался реализовать сжатие LZ .... и пытался сжать некоторые файлы, используя его .... но у меня есть некоторые логические проблемы ... Я серьезно не имею никакого представления о как данные должны быть сохранены обратно в файл ... Реальная проблема: предположим, что я получил строку соответствия «ls» [кто в таблице уже сделан, скажем, 289-й индекс], если заменить 289 на ls в файле то как это сделать? , потому что если раньше «ls» заняло 2 байта, то теперь 289 займет 3 байта. Если выше верно, то почему этот метод называется сжатием, а если нет, то какой будет правильный метод ... Мне просто нужен ответ, который подробно разъясняет мне эту логику.Техника сжатия LZ

код, который я сделал до сих пор:

int main() 
{ 
    int id,flag,d; 
    char ch,a[2],newstr[1000],currstr[1000]; 
    FILE *fr; 
    FILE *fw; 
    createTable(); 
    fr=fopen("old.txt","rb"); 
    fw=fopen("new.txt","wb"); 
    flag=0; 
    fscanf(fr,"%c",&ch); 
    fprintf(fw,"%c",ch); 
    a[0]=ch; 
    a[1]='\0'; 
    strcpy(currstr,a); 
    while(!feof(fr)) 
    { 
     showTable(); 
     fscanf(fr,"%c",&ch); 
     a[0]=ch; 
     a[1]='\0'; 
     strcat(currstr,a); 
     strcpy(newstr,currstr); 
     id=lookTable(newstr); 
     if(id!=5000) 
     { 
      strcpy(currstr,newstr); 
      flag=1; 
      d=id; 
     } 
     else 
     { 
      if (flag==0) 
      { 
       fprintf(fw,"%s",a); 
      } 
      else 
      { 
       fprintf(fw,"%d",d); 
       printf("%d new data\n",d); 
      } 
      addEntry(newstr); 
      strcpy(currstr,a); 
      flag=0; 
     } 
    } 
    fprintf(fw,"%s",currstr); 
    fclose(fr); 
    fclose(fw); 
    return 0; 
} 

ответ

2

Как правило, сжатые данные не сохраняются в виде текстового файла, поэтому ваше значение 289 не должно, вероятно, будет храниться в виде текста '2', '8', '9', но как число 289 как два байта (289/256 = 1 и 289/256 = 33). Вам, очевидно, придется сделать это для всех (под) строк и сохранить таблицу трансляции внутри выходного файла, чтобы вы могли перевести ее обратно.

 Смежные вопросы

  • Нет связанных вопросов^_^