我正在使用LZ4 compressor C lib。我压缩的一些文件是JPG和PNG。由于某些原因,我无法理解,方法
int compressedSize = LZ4_compress_default((char*)data,
compressedData, uncompressedSize, uncompressedSize);
有时会返回我正在压缩的图像(或零)的负值。
例如,我正在压缩两个标准JPG图像。一个返回值为'-236',而第二个返回精确的压缩字节数,这意味着第一个没有压缩。归零意味着LZ4无法压缩。我不知道-236的意思。是因为源数据已经在某种程度上被压缩了吗?
答案 0 :(得分:4)
函数返回定义是:
return : the number of bytes written into buffer 'dest' (necessarily <= maxOutputSize) or 0 if compression fails
如果压缩导致的大小大于uncompressedSize
,这很可能是已经压缩的文件,则该函数将失败。然而,这并不能解释为什么它返回了负值 - 这是没有记录的。但仍然存在如下情况:如果需要容纳压缩文件,则需要通过提供更大的缓冲区来增加文件大小。
查看source code,返回值由LZ4_compress_generic()
生成:
return (int) (((char*)op)-dest);
如果op
&lt; {},则指针算术将返回负值。 dest
,虽然查看代码,但很难看出可能会发生这种情况。如果它是一个问题(当然如果只提供一个更大的目标缓冲区不能解决问题),我建议您逐步调试调试器中的代码以确定问题所在。