【发布时间】:2022-08-18 14:53:40
【问题描述】:
我希望在 C# 中实现 Rosetta Code LZSW 解压缩方法,我需要一些帮助。原始代码可在此处获得:http://rosettacode.org/wiki/LZW_compression#C.23
我只关注解压缩方法,因为我“只是”(如果只是)想在 .NET 6 的 C# 程序中解压缩 .Z 文件。
我希望我的版本将一个 byte[] 作为输入并返回一个 byte[](因为我正在从文件中读取 .ReadAllBytes() 并希望使用解压缩的结果创建一个新文件)。
我的问题来自这样一个事实,即在 C# 中,字符是 16 位(2 个字节)而不是 8 位(1 个字节)。这真的让我很头疼,因为(在我看来)这意味着每个字符应该由两个字节表示。在 Rosetta Code 的代码中,创建的初始字典仅包含 0 -> 255 的整数键,表示最多 1 个字节,而不是两个。我在想这是否是他们实施中的错误?你怎么看?您将如何将此算法转换为带有签名的方法:byte[] Decompress(byte[])?
谢谢
-
是否有某些原因您不想使用 System.IO.Compression 类?
-
为什么
chars 不是 8 位很重要?这就是byte的用途!即使在 C 语言中,char 也不能保证是 8 位(至少,在我做一些 DSP 工作时不是这样,而且一切都是 16 位的,包括字符!)。 -
@SteveTodd 只不过这些类不支持 lzw 编码。
标签: c# .net compression lzw