2011-05-08 309 views
4

以下是完整的情况:我正在为来自平铺的.tmx文件的地图阅读器工作。大多数情况下,磁贴保存在base64字符串中,其中包含由gzip压缩的字节数组。现在我可以读取压缩字节数组,但我不知道如何解压缩它。我读了一些关于zlibboost的文档,但都是关于文件流和非常复杂的...C++解压缩字节的gzip数组

我对数据压缩领域很陌生,所以如果有人知道某种解决方案或一些有用的文档,我会真的apreciate。

回答

6
#include <fstream> 
#include <iostream> 
#include <boost/iostreams/filtering_streambuf.hpp> 
#include <boost/iostreams/copy.hpp> 
#include <boost/iostreams/filter/gzip.hpp> 

int main() 
{ 
    using namespace std; 

    ifstream file("hello.gz", ios_base::in | ios_base::binary); 
    filtering_streambuf<input> in; 
    in.push(gzip_decompressor()); 
    in.push(file); 
    boost::iostreams::copy(in, cout); 
} 

我不知道在看从http://www.boost.org/doc/libs/1_36_0/libs/iostreams/doc/classes/gzip.html采取上面的例子时有什么困难或复杂。解压缩非常简单。解压缩之前,请确保您解码base64。 (How do I base64 encode (decode) in C?应该帮助你)

+1

记住字节顺序接收来自其他架构 – sehe 2011-05-08 20:17:14

+0

流时的问题是,我不明白是如何工作的filtering_streambuf,我需要抬高一个char *不是文件...(我知道这是可能把char *放在文件中,稍后再读取结果,但是我想的更简单) 关于字节顺序,tiled是小端,它已经给我带来了一些麻烦,但现在没问题......谢谢请注意:) – bardes 2011-05-08 20:29:57

+0

您可以将'char *'放入流中,您可以使用'stringstream'进行处理。http://www.cplusplus.com/reference/iostream/stringstream/。 – 2011-05-08 20:31:55