C# LZW 压缩与解压

C# LZW Compression and Decompression

我查看了 SharpZipLib 库,但我不知道如何使用该库中的 LZW。 例如,我有一个 List<int> 位,我想对其进行压缩。

假设 List<int> bits 包含以下元素 {1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,1,1}

我如何使用 LZW SharpZipLib 或任何其他 LZW 库压缩它。

我已经尝试查看文档和 ICSharpCode.SharpZipLib.Lzw,但我没有找到任何可以帮助我压缩上面 List<int> 的内容。

SharpZibLib 只允许 decompressing LZW from a particular format, namely the Z file format.

查看 Stack Overflow 问题 LZW Data Compression for code to compress data using LZW. As for your data, I'd suggest packing those bits into bytes, create a byte array from a BitArray,然后查看该字节数组上的 MemoryStream。

所以像这样:

var bitArray = new BitArray(bits.Select(b => b == 1).ToArray());
var byteArray = new byte[bits.Length / 8];
bitArray.CopyTo(byteArray, 0);
// do the compression magic on byteArray, or a new MemoryStream(byteArray)