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

  • 相关阅读:
    对象池使用时要注意几点
    Flash3D学习计划(一)——3D渲染的一般管线流程
    714. Best Time to Buy and Sell Stock with Transaction Fee
    712. Minimum ASCII Delete Sum for Two Strings
    647. Palindromic Substrings(马拉车算法)
    413. Arithmetic Slices
    877. Stone Game
    338. Counting Bits
    303. Range Sum Query
    198. House Robber
  • 原文地址:https://www.cnblogs.com/newstart/p/3914888.html
Copyright © 2011-2022 走看看