Я пытаюсь использовать liblzma для сжатия и распаковки данных. Кажется, что полученные данные всегда чистая память (\ xCD).
file.open("D:\\out.txt", std::ifstream::binary);
while (file.good())
bytes.push_back(file.get());
file.close();
uint8_t* data = new uint8_t[bytes.size()];
std::copy(bytes.begin(), bytes.end(), data);
lzma_stream stream = LZMA_STREAM_INIT;
stream.next_in = data;
stream.avail_in = bytes.size();
stream.next_out = (uint8_t*)malloc(bytes.size());
stream.avail_out = bytes.size();
std::cout << lzma_easy_encoder(&stream, 0, LZMA_CHECK_CRC64) << " encoder result" << std::endl;
std::cout << lzma_code(&stream, LZMA_RUN) << " code result" << std::endl;
std::ofstream outfile;
outfile.open("D:\\outfile.txt", std::ifstream::binary);
outfile.write(reinterpret_cast<const char*>(stream.next_out), stream.avail_out);
outfile.close();
Выше приведен код, который я использую для кодирования данных. И lzma_easy_encoder, и lzma_code возвращают LZMA_OK, что, по-видимому, правильно.
Если я вместо этого использую lzma_stream_decoder, результат будет таким же, а next_out приведет только к потоку \ xCD.
Изма библиотека «ест» от next_in
и «переваривает» в next_out
поэтому, когда вы вызываете функцию сжатия, эти значения обновляются.
Увидеть https://github.com/kobolabs/liblzma/blob/master/doc/examples/01_compress_easy.c для примера.
Других решений пока нет …