Недавно я попытался интегрировать сжатие данных без потерь в свой игровой движок для загрузки ресурсов; но этот простой пример сжатия похоже, работает неправильно. Какие-либо предложения ? Вот мой код:
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
РЕДАКТИРОВАТЬ При распаковке данных отображается только часть "Привет": остальные символы являются случайными/без символов
EDIT 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;
const int dstBufferSize = LZ4_compressBound(sizeof(srcData));
правильно.sizeof(srcData)
скорее всего 4 или 8. - person Simon Kraemer   schedule 24.02.2016sizeof(srcData)
- это размер указателя на вашу строку, а не длина строки. - person user2807083   schedule 24.02.2016