zlib开发笔记(一):zlib库介绍、编译和工程模板

简介: zlib开发笔记(一):zlib库介绍、编译和工程模板

前言

  Qt使用一些压缩解压功能,介绍过libzip库编译,本篇说明zlib库。


版本编译引导


zlib库

  zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使用。

  官网:http://www.zlib.net/

  QQ群:1047134658(点击“文件”搜索“zlib”,群内与博文同步更新)


zlib编译

步骤一:解压

步骤二:Cmake配置(mingw32版本)

步骤三:生成工程

步骤四:命令行编译

步骤五:安装install


模块化


Demo

void ZlibManager::testEnv()
{
    QString fileName = "1.txt";
    QString outFileName = "1.txt_zip";
    // 打开文件,读取进入内存
    QFile file(fileName);
    if(!file.open(QIODevice::ReadOnly))
    {
        LOG;
        return;
    }
    QByteArray byteArray = file.readAll();
    LOG << byteArray.size();
    byteArray.append((char)0x00);
    LOG << "origin size:" << byteArray.size() << ":" << QString(byteArray);
    file.close();
    // 计算压缩后的文件大小
    int len = compressBound(byteArray.size());
    LOG << len << (uLong)byteArray.size();
    QByteArray compressByteArray = QByteArray(len, 0x00);
    int ret = compress((uchar *)compressByteArray.data(), (uLong *)&len, (uchar *)byteArray.data(), (uLong)byteArray.size());
    LOG << ret << len;
    if(Z_OK == ret)
    {
        LOG << "Succeed to compress" << byteArray.size() << "to" << len;
    }
    //  压缩后存入文件
    QFile outFile(outFileName);
    if(!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
    {
        LOG;
        return;
    }
    outFile.write(compressByteArray, len);
    outFile.close();
    LOG << QString(compressByteArray.mid(0, len).toHex(' '));
    // 解压
    QByteArray unCompressByteArray = QByteArray(1024, 0x00);
    // 入坑一 unCompressLen传入的时候,作为指示缓存区的长度,运行完后,作为传出实际的长度
    int unCompressLen = unCompressByteArray.size();
    LOG << unCompressByteArray.size();
    ret = uncompress((uchar *)unCompressByteArray.data(), (uLong *)&unCompressLen, (uchar *)compressByteArray.data(), (uLong)len);
    LOG << ret << unCompressLen << len;
    if(Z_OK == ret)
    {
        LOG << "Succeed to uncompress" << compressByteArray.size() << "to" << unCompressLen;
    }
    // 解压后的存文文件 2.txt
    QString fileName2 = "2.txt";
    QFile file2(fileName2);
    if(!file2.open(QIODevice::WriteOnly | QIODevice::Truncate))
    {
        LOG;
        return;
    }
    file2.write(unCompressByteArray, unCompressLen);
    file2.close();
    LOG << "restore:" << QString(unCompressByteArray.mid(0, unCompressLen));
}


运行结果


工程模板v1.0.0

  对应工程模板:zlibDemo_v1.0.0_基础模板_测试压缩解压.rar


相关文章
|
9月前
|
Windows
CMake基础(5)安装项目
CMake基础(5)安装项目
97 3
|
9月前
|
程序员 API 数据库
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
197 1
|
9月前
|
编译器 Linux C语言
【CMake install目录解析】CMake 深度解析:实现精准、高效的项目构建与安装
【CMake install目录解析】CMake 深度解析:实现精准、高效的项目构建与安装
767 0
|
Ubuntu 编译器 Windows
zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板
zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板
zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板
|
9月前
|
存储 缓存 Unix
CMake基础(8)包含第三方库
CMake基础(8)包含第三方库
95 1
|
9月前
|
Linux C语言
【Linux系统编程】项目自动化构建工具make/Makefile--2
【Linux系统编程】项目自动化构建工具make/Makefile--2
|
9月前
|
Linux 开发工具 C语言
【Linux系统编程】项目自动化构建工具make/Makefile--1
【Linux系统编程】项目自动化构建工具make/Makefile--1
|
9月前
|
C++
项目自动化构建工具——make/Makefile
项目自动化构建工具——make/Makefile
95 0
|
XML 运维 数据可视化
使用cmake 构建构建新项目的时候,编译提示库找不到怎么办?
以上是一些常见的解决方案,但具体解决方案可能因具体情况而异。如果以上解决方案无法解决问题,请提供更多详细信息,留在评论区,以便博主更好地帮助您解决问题。
375 0
make、Makefile项目自动化构建工具
make、Makefile项目自动化构建工具
127 0

热门文章

最新文章