zoukankan      html  css  js  c++  java
  • qt 调用zlib压缩与解压缩功能

    Zlib是一种免费且通用的压缩库,由于Zlib压缩效果比LZW好,而且解压缩速度快,更重要的是商业软件中使用Zlib不需要缴纳版权费,所以很多游戏都使用Zlib压缩资源文件。

    Zlib是由Jean-loup Gailly 和 Mark Adler共同编写完成的压缩库,Zlib是开源的,而且从Zlib的官方网站http://www.zlib.net/上可以下载到不同平台和编译器下的源代码实现。

    Zlib联合使用LZ77算法和Huffman哈夫曼树来实现数据压缩和数据解压。

    zlib源码http://download.csdn.net/detail/huangyuancao/7760901

    void MainWindow::on_pushButton_clicked()
    {
        FILE* File_src;
        FILE* File_compress;
        FILE* File_uncompress;
        unsigned long len_src;
        unsigned long len_compress;
        unsigned long len_uncompress = MaxBufferSize;
        unsigned char *buffer_src  = new unsigned char[MaxBufferSize];
        unsigned char *buffer_compress  = new unsigned char[MaxBufferSize];
        unsigned char *buffer_uncompress = new unsigned char[MaxBufferSize];
        File_src = fopen("src.txt","r");
        File_compress = fopen("compress.txt","w");
        File_uncompress = fopen("uncompress.txt","w");
        //compress
        len_src = fread(buffer_src,sizeof(char),MaxBufferSize-1,File_src);
        compress(buffer_compress,&len_compress,buffer_src,len_src);
        fwrite(buffer_compress,sizeof(char),len_compress,File_compress);
        qDebug() << "normal zlib:" ;
        qDebug() << "src:
    " << buffer_src << ",length:" << len_src ;
        qDebug() << "compress:
    " << buffer_compress << ",length:" << len_compress ;
        //uncompress
        uncompress(buffer_uncompress,&len_uncompress,buffer_compress,len_compress);
        fwrite(buffer_uncompress,sizeof(char),len_uncompress,File_uncompress);
        qDebug() << "uncompress:
    " << buffer_uncompress << ",length:" << len_uncompress;
        fclose(File_src);
        fclose(File_compress);
        fclose(File_uncompress);
    }
    void MainWindow::on_pushButton_2_clicked()
    {
        QByteArray src;
        src.append("中华人民共和国,china mobile,123456 ");
        unsigned long len_compress;
        unsigned long len_uncompress;
        unsigned char *buffer_compress  = new unsigned char[MaxBufferSize];
        unsigned char *buffer_uncompress = new unsigned char[MaxBufferSize];
        compress(buffer_compress,&len_compress,(Bytef*)src.data(), src.length());
        uncompress(buffer_uncompress,&len_uncompress,buffer_compress,len_compress);
        qDebug() << "qt zlib:"  ;
        qDebug() << "src:
    " << src.data() << ",length:" << src.size() ;
        qDebug() << "compress:
    " << buffer_compress << ",length:" << len_compress ;
        qDebug() << "uncompress:
    " << buffer_uncompress << ",length:" << len_uncompress ;
    }
    

    执行效果:

    参考http://www.cnblogs.com/chuncn/archive/2011/03/23/1992481.html

    qt调用zlib实例http://download.csdn.net/detail/huangyuancao/7760919

  • 相关阅读:
    P2121 拆地毯
    ※P1194 买礼物
    P1991 无线通讯网
    P2872 [USACO07DEC]Building Roads S
    python+pycharm+selenium+谷歌浏览器驱动 自动化环境部署(一)
    from bs4 import BeautifulSoup 引入需要安装的文件和步骤
    小菜鸟的python3.8.5+RobotFramework+RIDE的安装之路
    IntelliJ IDEA 之 工具箱(Tool Box)
    RobotFrameWork Web自动化测试环境搭建
    Python pip 安装与使用
  • 原文地址:https://www.cnblogs.com/newstart/p/3914888.html
Copyright © 2011-2022 走看看