使用C / C ++在Zlib中使用Gzip字符串

时间:2014-02-19 07:47:48

标签: gzip gzipstream gz gzipinputstream gzipoutputstream

我想使用C ++(或C)中的gzip来压缩字符串。如果可能的话,我想使用zlib。

当我得知我必须使用zlib进行压缩和解压缩时,我用Google搜索了几分钟,然后快速编写了一个程序来gzip一个文件然后解压缩它。但是,我实际上没有必要这样做。我需要使用gzip压缩和解压缩字符串,而不是文件。我找不到很多关于在字符串上使用gzip的好文档。我发现的每个例子都适用于文件。

有人能告诉我一个简单的例子吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

它内置于Poco(C ++库/框架,许多实用程序,网络,你有什么)。这是一个示例程序:

#include <iostream>
#include <sstream>
#include <Poco/InflatingStream.h>
#include <Poco/DeflatingStream.h>
#include <Poco/StreamCopier.h>

int main() {

    std::ostringstream stream1;
    Poco::DeflatingOutputStream
      gzipper(stream1, Poco::DeflatingStreamBuf::STREAM_GZIP);
    gzipper << "Hello World!";
    gzipper.close();
    std::string zipped_string = stream1.str();
    std::cout << "zipped_string: [" << zipped_string << "]\n";

    std::ostringstream stream2;
    Poco::InflatingOutputStream
      gunzipper(stream2, Poco::InflatingStreamBuf::STREAM_GZIP);
    gunzipper << zipped_string;
    gunzipper.close();
    std::string unzipped_string = stream2.str();
    std::cout << "unzipped_string back: [" << unzipped_string << "]\n";

    return 0;
}

好消息是,您可以将Poco gzipping流连接到文件等,而不是上面的ostringstream。