Qt调用zlib压缩解压文件

来源:互联网 发布:山东省网络作家协会 编辑:程序博客网 时间:2024/05/21 06:24

zlib提供compress uncompress 两个函数分别是压缩和解压

ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,                                 const Bytef *source, uLong sourceLen));
ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,                                   const Bytef *source, uLong sourceLen));

压缩前可以通过compressBound函数来预测压缩后的数据大小

    QFile file("SilkPlatform.png");    file.open(QIODevice::ReadOnly);    QByteArray bytes = file.readAll();    file.close();    int nDataSize = bytes.size();    char *cData = new char[nDataSize];    memcpy(cData, bytes.data(), nDataSize);    int nCompSize = compressBound(nDataSize);    char *cComp = new char[nCompSize];    //压缩    if (zlibCompress(cComp, nCompSize, cData, nDataSize) != Z_OK)    {        printf("compress failed!\n");        return -1;    }    //解压    memset(cData, 0, nDataSize);    if (zlibUncompress(cData, nDataSize, cComp, nCompSize) != Z_OK)    {        printf("uncompress failed!\n");        return -1;    }    delete[] cComp;    QFile fileOut("SilkPlatformOut.png");    fileOut.open(QIODevice::WriteOnly);    fileOut.write(reinterpret_cast<char*>(cData), nDataSize);    fileOut.close();    delete[] cData;

需要完整代码请访问QtOtherExamples

原创粉丝点击