前言
新建项目:pro文件中新增代码
LIBS+= -lz
在main.cpp函数中#include "zlib.h",如果此时运行代码提示没有找到对应的函数,那么就qt安装目录:D:\C++\qt5.12.7\Tools\mingw730_64\x86_64-w64-mingw32\include(这里是博主的路径,作为参考找自己的路径)下查看是否有zlib.h头文件,复制这个文件到当前目录下即可运行
数据流压缩解压缩
#include "zlib.h"
#include <zlib.h>
int main(int argc,char * argv[])
{
// QApplication a(argc, argv);
char text[] = "zlib compress and uncompress test\nturingo@163.com\n2012-11-05\n";
uLong tlen = strlen(text) + 1; /* 需要把字符串的结束符'\0'也一并处理 */
char* buf = NULL;
uLong blen;
cout <<"start: tlen = "<< tlen << endl;
/* 计算缓冲区大小,并为其分配内存 */
blen = compressBound(tlen); /* 压缩后的长度是不会超过blen的 */
if((buf = (char*)malloc(sizeof(char) * blen)) == NULL)
{
printf("no enough memory!\n");
return -1;
}
cout << "compressBound: blen = " << blen<< endl;
// /* 压缩 */
if(compress((Bytef*)buf, &blen,(Bytef*) text, tlen) != Z_OK)
{
printf("compress failed!\n");
return -1;
}
cout <<"compress \n";
cout << strlen(buf)+1 << endl;
cout <<"uncompress \n";
/* 解压缩 */
if(uncompress((Bytef*)text, &tlen, (Bytef*)buf, blen) != Z_OK)
{
printf("uncompress failed!\n");
return -1;
}
/* 打印结果,并释放内存 */
printf("%s", text);
if(buf != NULL)
{
free(buf);
buf = NULL;
}
// return a.exec();
return 0;
}
char text[] = "zlib testddsa ";
uLong tlen = strlen(text) + 1; /* 需要把字符串的结束符'\0'也一并处理 */
char* buf = NULL;
uLong blen;
cout <<"start: tlen = "<< tlen << endl;
/* 计算缓冲区大小,并为其分配内存 */
blen = compressBound(tlen); /* 压缩后的长度是不会超过blen的 */
if((buf = (char*)malloc(sizeof(char) * blen)) == NULL)
{
printf("no enough memory!\n");
return -1;
}
cout << "blen = " << blen<< endl;
compress((Bytef*)buf,&blen,(Bytef*)text,tlen);
cout << "blen = "<< blen<< endl;
cout << "strlen(buf) = " << strlen(buf)<< endl;
uLong ubound = compressBound(strlen(buf)+1 );/* 压缩后的长度是不会超过blen的 */
cout << "bound =" << ubound<< endl;
uncompress((Bytef*)text,&ubound,(Bytef*)buf,blen);
cout << "unbound =" << ubound<< endl;
文件压缩解压缩
uLong blen,tlen;
char text[1024];
char* dest;
FILE* f,ff;
// f = fopen("test.txt","r+");
// fread(text,1,1024,f);
// tlen = strlen(text)+1;
// cout << text << endl;
// cout << "tlen = "<< tlen << endl;
// blen = compressBound(tlen);
// cout << "blen = "<< blen << endl;
// dest = (char *)malloc(blen );
// compress((Bytef*)dest,&blen,(Bytef*)text,tlen);
// cout << "blen = "<< blen << endl;
// ff = fopen("test.aaa","w");
// fwrite(dest,blen,1,ff);
// fclose(ff);
// fclose(f);
f= fopen("test.aaa","r+");
fread(dest,1024,1,f);
fclose(f);
// cout << dest << endl;
blen = compressBound(strlen(dest)+1);
uncompress((Bytef*)text,&blen,(Bytef*)dest,1024);
cout << text << endl;