1

LZ4 コンプレッサーC libを使用しています。私が圧縮するファイルのいくつかは、JPG と PNG です。どういうわけか、私には理解できませんが、その方法は

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

圧縮している画像に対して負の値(またはゼロ)を返すことがあります。

たとえば、2 つの標準 JPG 画像を圧縮しています。1 つは値「-236」を返し、2 番目は圧縮されたバイト数を返します。これは、最初の圧縮に失敗したことを意味します。ゼロリターンは、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 に答える