该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
对于这个对LZW压缩算法的实现 可以编译成静态库什么的来使用,下面是用它来压缩解压文件的例子:
#include
#include
#include
#include
LZWBOOL LZWBACKCALL LZW_PROC(LZWDWORD size,void *buffer,void *orgs)
{
if(fwrite(buffer,1,size,(FILE*)orgs) == 0)
return FALSE;
return TRUE;
}
//压缩文件
/*
int __cdecl main(int argc,char **argv)
{
FILE *i;
FILE *o;
LZWCOMPRESSER *pcompresser;
unsigned char arr[4096];
unsigned char arr2[4096];
size_t size;
pcompresser = (LZWCOMPRESSER*)malloc(sizeof(LZWCOMPRESSER));
i = fopen("C:\\Users\\XXXX\\Desktop\\a.bmp","rb");
o = fopen("C:\\Users\\XXXX\\Desktop\\a.lzw","wb");
if(i == NULL || o == NULL)
printf("error!\n");
LZWCompresser_Begin(pcompresser,2048,arr2,LZW_PROC,o);
printf("compressing ... \n");
while((size = fread(arr,1,4096,i)) > 0)
{
switch(LZWCompresser_Run(pcompresser,size,arr))
{
case LZWCOMPRESSER_OUTPUTERROR:
printf("Output Error!\n");
break;
case LZWCOMPRESSER_BUG:
printf("Bug!\n");
break;
default:;
}
}
LZWCompresser_End(pcompresser);
printf("end! \n");
fclose(i);
fflush(o);
fclose(o);
system("pause");
free(pcompresser);
return 0;
}
*/
//解压文件
int __cdecl main(int argc,char **argv)
{
FILE *i;
FILE *o;
LZWDECODER *pdecoder;
unsigned char arr[4096];
unsigned char arr2[4096];
size_t size;
pdecoder = (LZWDECODER*)malloc(sizeof(LZWDECODER));
i = fopen("C:\\Users\\XXXX\\Desktop\\a.lzw","rb");
o = fopen("C:\\Users\\XXXX\\Desktop\\b.bmp","wb");
if(i == NULL || o == NULL)
printf("error!\n");
LZWDecoder_Init(pdecoder,4096,arr2,LZW_PROC,o);
printf("decodeing ... \n");
while((size = fread(arr,1,4096,i)) > 0)
{
switch(LZWDecoder_Decode(pdecoder,size,arr))
{
case LZWDECODER_END:
printf("decode end! \n");
break;
case LZWDECODER_BUG:
printf("bug!\n");
break;
case LZWDECODER_OUTPUTERROR:
printf("writing error!\n");
break;
case LZWDECODER_CODEERROR:
printf("code error!\n");
break;
case LZWDECODER_DECODING:
continue;
}
break;
}
fclose(i);
fflush(o);
fclose(o);
system("pause");
free(pdecoder);
return 0;
}
本人比较懒 所以就写这样了