Сжатие / декомпрессия с liblzma, приводящая к чистой памяти

Я пытаюсь использовать 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.

-2

Решение

Изма библиотека «ест» от next_in и «переваривает» в next_out поэтому, когда вы вызываете функцию сжатия, эти значения обновляются.
Увидеть https://github.com/kobolabs/liblzma/blob/master/doc/examples/01_compress_easy.c для примера.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]