QT外部库:zlib

发布于:2024-05-08 ⋅ 阅读:(17) ⋅ 点赞:(0)

前言

 新建项目: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;