• 大小: 168KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: lzw压缩  解压  c语言  

资源简介

实现lzw数据压缩与解压 压缩比在2:1以上 实现无损压缩

资源截图

代码片段和文件信息

/********************************************************************
**
** Copyright (c) 2005 曹道伟
**
** LZW 数据压缩/解压缩算法程序
**
** 2005-5-20
**
*****************************************************************************/
#include 
#include 
#define BITS 12                   /* 设置每个常量的位数 */
#define HASHING_SHIFT BITS-8      /* 为12,13或者为14*  */
#define MAX_VALUE (1 << BITS) - 1 /* 当在MS-DOS下选择14位*/
#define MAX_CODE MAX_VALUE - 1    /* 时,提示需要重新编译*/
                                  
#if BITS == 14
  #define TABLE_SIZE 18041      
#endif                           
#if BITS == 13          
  #define TABLE_SIZE 9029
#endif
#if BITS <= 12
  #define TABLE_SIZE 5021
#endif

void *malloc();

int *code_value;                  /* 代码值数组          */
unsigned int *prefix_code;        /* 用于保存压缩前的数据 */
unsigned char *append_character;  /* 用于保存压缩后的数据  */
unsigned char decode_stack[4000]; /* 用于保存解压缩后的数据*/

char ok;
/********************************************************************
**
** 本程序从命令行获得文件名并压缩该文件
** 在C盘根目录下输出压缩后的文件
** 然后再解压缩,解压缩后的文件.
**
*************************************************************************/

main(int argc char *argv[])
{

FILE *input_file;
FILE *output_file;
FILE *lzw_file;
char input_file_name[81];
int  select;
char output_filename[81];
char compressed_filename[81];
char expanded_filename[81];
/*
**  申请三个系统缓存用读取文件、压缩、解压缩时用.
*/
  code_value=malloc(TABLE_SIZE*sizeof(unsigned int));
  prefix_code=malloc(TABLE_SIZE*sizeof(unsigned int));
  append_character=malloc(TABLE_SIZE*sizeof(unsigned char));
  if (code_value==NULL || prefix_code==NULL || append_character==NULL)
  {
    printf(“Fatal error allocating table space!\n“);
    /*
** exit();
*/
  }
/*
** 获取文件名 打开文件 创建压缩后的文件.
*/
loop:

// clrscr();
//    clreol();
  printf(“**************************************************************\n“);
  printf(“*            Welcome to cao LZW arithmetic demo program!     *\n“);
  printf(“*            1.Compress file.                                *\n“);
  printf(“*            2.Expand file.                                  *\n“); 
  printf(“*            3.Exit.                                         *\n“);
  printf(“*            Please select a opt.                            *\n“);
  printf(“**************************************************************\n“);

  scanf(“%d“&select);
 /******************************************/
  if(select == 1)
{
  if (argc>1)
    strcpy(input_file_nameargv[1]);
  else
  {
    printf(“\nInput file name? “);
    scanf(“%s“input_file_name);
printf(“\nCompressed file name? “);
scanf(“%s“compressed_filename);
  }
  input_file=fopen(input_file_name“rb“);
  lzw_file=fopen(compressed_filename“wb“);
  while (input_file==NULL || lzw_file==NULL)
  {
    printf(“Fatal error opening files!\n“);
printf(“\nInput file name? “);
    scanf(“%s“input_file_name);
printf(“\nCompressed file name?“);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2884  2009-06-04 10:21  lzw\1.txt

     文件     172081  2009-06-04 16:57  lzw\Debug\lzw算法.exe

     文件     191696  2009-06-04 16:57  lzw\Debug\lzw算法.ilk

     文件      17039  2009-06-04 16:57  lzw\Debug\lzw算法.obj

     文件     177496  2009-06-04 16:46  lzw\Debug\lzw算法.pch

     文件     443392  2009-06-04 16:57  lzw\Debug\lzw算法.pdb

     文件      33792  2009-06-04 17:00  lzw\Debug\vc60.idb

     文件      53248  2009-06-04 16:57  lzw\Debug\vc60.pdb

     文件      27136  2009-06-04 10:28  lzw\LZW.doc

     文件       9197  2009-06-04 16:56  lzw\lzw算法.c

     文件       3413  2009-06-04 10:14  lzw\lzw算法.dsp

     文件        539  2009-06-04 10:25  lzw\lzw算法.dsw

     文件      41984  2009-06-04 17:01  lzw\lzw算法.ncb

     文件      48640  2009-06-04 17:01  lzw\lzw算法.opt

     文件        248  2009-06-04 16:59  lzw\lzw算法.plg

     目录          0  2009-06-05 10:07  lzw\Debug

     目录          0  2009-06-05 10:07  lzw

----------- ---------  ---------- -----  ----

              1222785                    17


评论

共有 条评论