LZ4 неправильно сжимает строки

Недавно я попытался интегрировать без потерь сжатие данных на мой игровой движок для загрузки активов; но это простой пример сжатия похоже не работает правильно. Какие-либо предложения ? Вот мой код:

 const char *srcData = "Hi ! This is a really really really long test string !";
const int dstBufferSize = LZ4_compressBound(sizeof(srcData));
char *dstData = new char[dstBufferSize];
int bytesPassed = LZ4_compress_default(srcData, dstData,
sizeof(srcData),
dstBufferSize); // compress data
BOOST_LOG_TRIVIAL(info) << dstData << std::endl; // print compressed data

delete[] dstData;

Это выход. Очевидно, вы видите, что это неправильно (часть строки отсутствует):

[2016-02-24 15:56:47.986366] [0x00000b0c] [info]    @Hi !═══════════════²²²²À▀WÏÇ0

РЕДАКТИРОВАТЬ
При распаковке данных появляется только часть «Привет»: остальные — случайные символы / без символов

РЕДАКТИРОВАТЬ 2 После предложения Саймона я изменил код; но после распаковки кода; я только получаю Привет! (ничего после него); Вот обновленный код:

 const char *srcData = "Hi ! This is a really really really long test string !";
const int dstBufferSize = LZ4_compressBound(strlen(srcData) + 1);
char *dstData = new char[dstBufferSize];
int bytesPassed = LZ4_compress_default(srcData, dstData,
sizeof(srcData),
dstBufferSize);
BOOST_LOG_TRIVIAL(info) << dstData << std::endl;

std::ofstream fWriter("test.bin", std::ofstream::binary);
fWriter << dstData;
fWriter.close();

char* decStr = new char[strlen(srcData) + 1];

LZ4_decompress_fast(dstData, decStr, strlen(srcData) + 1);

std::cout << decStr << std::endl; // only Hi appearing

delete[] dstData;

0

Решение

Ты используешь sizeof(srcData) который даст вам размер указателя, а не данных, на которые он указывает.

Вы должны использовать strlen(srcData)+1 вместо (+1 для \0).

Или использовать std::string а также std::string::size() (Также с +1 для нулевого терминатора).

3

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

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

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