C ++ Распаковать массив байтов gzip - PullRequest
5 голосов
/ 09 мая 2011

Вот полная ситуация: я работаю в картридере для файлов .tmx, из плиточных.Чаще всего плитки сохраняются в строке base64, которая содержит массив байтов, сжатых gzip.Прямо сейчас я могу прочитать массив сжатых байтов, но я не знаю, как его распаковать.Я прочитал несколько документов о zlib и boost, но оба они были о файловых потоках и очень сложны ...

Я очень новичок в области сжатия данных, так что если кто-нибудь знает какое-то решениенекоторая полезная документация, которую я действительно оценил бы.

1 Ответ

7 голосов
/ 09 мая 2011
#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. ( Как мне base64 кодировать (декодировать) в C? должно вам помочь)

...