1

我正在使用LZ4 压缩器C 库。我压缩的一些文件是 JPG 和 PNG。由于某种原因,我无法理解,该方法

 int compressedSize =   LZ4_compress_default((char*)data,
            compressedData, uncompressedSize, uncompressedSize);

有时会为我正在压缩的图像返回负值(或零)。

例如,我正在压缩两个标准的 JPG 图像。一个返回值'-236',而第二个返回压缩字节数,这意味着第一个压缩失败。归零意味着 LZ4 压缩失败。我不知道-236是什么意思。是不是因为源数据已经被压缩到了一定程度?

4

1 回答 1

4

函数返回定义为:

  return : the number of bytes written into buffer 'dest' (necessarily <= maxOutputSize)
           or 0 if compression fails

如果压缩导致的大小大于uncompressedSize,这很可能是已经压缩的文件,该函数将失败。然而,这并不能解释为什么它返回了一个负值——没有记录。但是,如果您需要容纳压缩文件,仍然需要通过提供更大的缓冲区来增加文件大小。

查看源代码,返回值LZ4_compress_generic()由以下方式生成:

return (int) (((char*)op)-dest);

op如果< ,指针算术将返回负值dest,尽管查看代码,很难看出这是如何发生的。如果这是一个问题(当然如果只是提供更大的目标缓冲区并不能解决问题),我建议您逐步检查调试器中的代码以确定问题所在。

于 2016-12-27T14:38:29.647 回答