zlib安装,使用c++

linux下Zlib的安装与使用

https://blog.csdn.net/qq_21383435/article/details/79539034

http://www.zlib.net/

https://github.com/gdsgtcz/Zlib-Lua-C/blob/master/lua-zlib/ZLibString.cpp

 

#include "ZLibString.h"

CZlibMgr* CZlibMgr::instance = NULL;

CZlibMgr::CZlibMgr()
{
}

CZlibMgr::~CZlibMgr()
{
}

CZlibMgr* CZlibMgr::getInstance()
{
    if (instance == NULL) {
        instance = new CZlibMgr();
    }
    return instance;
}

bool CZlibMgr::Compress(const char* pcContentBuf, char* pcCompBuf, unsigned long& ulCompLen)
{
    if (pcContentBuf == NULL)
    {
        return false;
    }
    
    if (strlen(pcContentBuf) == 0)
    {
        return false;
    }
    
    memset(compr, 0, MAXBUFFERSIZE);
    
    uLong comprLen;
    int err;
    
    uLong len = strlen(pcContentBuf);
    comprLen = sizeof(compr) / sizeof(compr[0]);
    
    err = compress(compr, &comprLen, (const Bytef*)pcContentBuf, len);
    if (err != Z_OK)
    {
        cout << "compess error: " << err << endl;
        return false;
    }
    cout << "orignal size: " << len << " , compressed size : " << comprLen << endl;
    memcpy(pcCompBuf, compr, comprLen);
    ulCompLen = comprLen;
    
    return true;
}

bool CZlibMgr::UnCompress(const char* pcCompBuf, char* pcUnCompBuf, unsigned long ulCompLen)
{
    if (pcCompBuf == NULL)
    {
        cout <<__FUNCTION__ << "================> pcCompBuf is null please to check " << endl;
        return false;
    }
    
    if (strlen(pcCompBuf) == 0)
    {
        cout <<__FUNCTION__ << "strlen(pcCompBuf) == 0  ========================> " << endl;
        return false;
    }
    
    memset(uncompr, 0, MAXBUFFERSIZE);
    uLong uncomprLen = MAXBUFFERSIZE;
    int err;
    
    err = uncompress(uncompr, &uncomprLen, (const Bytef *)pcCompBuf, ulCompLen);
    if (err != Z_OK)
    {
        cout << "uncompess error: " << err << endl;
        return false;
    }
    
    cout << "compress size: " << ulCompLen << "  uncompressed size : " << uncomprLen << endl;
    memcpy(pcUnCompBuf, uncompr, uncomprLen);
    
    return true;
}

 

C++使用zlib库可以实现数据的压缩和解压缩。下面是一个简单的示例代码: ```cpp #include <iostream> #include <fstream> #include <string> #include <zlib.h> // 压缩函数 bool compressFile(const std::string& sourceFile, const std::string& destFile) { std::ifstream inFile(sourceFile, std::ios::binary); std::ofstream outFile(destFile, std::ios::binary); if (!inFile || !outFile) { return false; } z_stream stream; stream.zalloc = Z_NULL; stream.zfree = Z_NULL; stream.opaque = Z_NULL; if (deflateInit(&stream, Z_DEFAULT_COMPRESSION) != Z_OK) { return false; } char inBuffer[1024]; char outBuffer[1024]; stream.avail_in = inFile.readsome(inBuffer, sizeof(inBuffer)); stream.next_in = reinterpret_cast<Bytef*>(inBuffer); do { stream.avail_out = sizeof(outBuffer); stream.next_out = reinterpret_cast<Bytef*>(outBuffer); deflate(&stream, Z_FINISH); outFile.write(outBuffer, sizeof(outBuffer) - stream.avail_out); } while (stream.avail_out == 0); deflateEnd(&stream); inFile.close(); outFile.close(); return true; } // 解压缩函数 bool decompressFile(const std::string& sourceFile, const std::string& destFile) { std::ifstream inFile(sourceFile, std::ios::binary); std::ofstream outFile(destFile, std::ios::binary); if (!inFile || !outFile) { return false; } z_stream stream; stream.zalloc = Z_NULL; stream.zfree = Z_NULL; stream.opaque = Z_NULL; if (inflateInit(&stream) != Z_OK) { return false; } char inBuffer[1024]; char outBuffer[1024]; stream.avail_in = inFile.readsome(inBuffer, sizeof(inBuffer)); stream.next_in = reinterpret_cast<Bytef*>(inBuffer); do { stream.avail_out = sizeof(outBuffer); stream.next_out = reinterpret_cast<Bytef*>(outBuffer); inflate(&stream, Z_NO_FLUSH); outFile.write(outBuffer, sizeof(outBuffer) - stream.avail_out); } while (stream.avail_out == 0); inflateEnd(&stream); inFile.close(); outFile.close(); return true; } int main() { std::string sourceFile = "input.txt"; std::string compressedFile = "compressed.zlib"; std::string decompressedFile = "decompressed.txt"; // 压缩文件 if (compressFile(sourceFile, compressedFile)) { std::cout << "File compressed successfully." << std::endl; } else { std::cout << "Failed to compress file." << std::endl; } // 解压缩文件 if (decompressFile(compressedFile, decompressedFile)) { std::cout << "File decompressed successfully." << std::endl; } else { std::cout << "Failed to decompress file." << std::endl; } return 0; } ``` 这个示例代码演示了如何使用zlib库进行文件的压缩和解压缩。你可以根据自己的需求修改输入输出文件的路径和名称。在压缩文件时,使用`deflate`函数将输入数据压缩,并将压缩后的数据写入输出文件。在解压缩文件时,使用`inflate`函数将压缩数据解压缩,并将解压缩后的数据写入输出文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值