C# 哈夫曼编码。从二进制文件解码
哈夫曼编码任务 我在做什么。 从文件中读取字符串,准备哈夫曼结构,将字符串编码为位,并将该位保存到二进制文件中 我需要的是: 从二进制文件解码字符串,但编码和解码必须是独立的。关闭e.q的应用程序后 我会像这样保存到二进制文件:C# 哈夫曼编码。从二进制文件解码,c#,C#,哈夫曼编码任务 我在做什么。 从文件中读取字符串,准备哈夫曼结构,将字符串编码为位,并将该位保存到二进制文件中 我需要的是: 从二进制文件解码字符串,但编码和解码必须是独立的。关闭e.q的应用程序后 我会像这样保存到二进制文件: A:000;l:001;a:10; :110;m:010;k:011;o:1110;t:1111; 00000110110010101100111110111110; 需要阅读和解码。所以我想我需要重新构建哈夫曼结构,但是如何呢 因为你知道A:000;l:001;a:
A:000;l:001;a:10; :110;m:010;k:011;o:1110;t:1111;
00000110110010101100111110111110;
需要阅读和解码。所以我想我需要重新构建哈夫曼结构,但是如何呢 因为你知道
A:000;l:001;a:10;:110;m:010;k:011;o:1110;t:1111
您可以尝试一次遍历字符串000001101100101011001111110111110
一个字符。还为每个字符及其代码提供一个switch语句。当您遇到一个案例时,例如000
,您可以输出a。这是我看到您能够返回字符串的一种方式。我相信有更好的出路
希望这有帮助。我看到了这些选项
- 编码器和解码器总是使用同一棵树,它从不改变。所以解码器已经知道,
意味着000
A
- 树以二进制格式附加在消息之前。编码器和解码器必须知道存储树的确切格式,有很多方法可以做到这一点。在最简单的情况下,将有编码字符的数量和每个字符的ascii码,哈夫曼码的长度和代码本身
- 树是使用自适应哈夫曼编码动态构建的,但它似乎不是您的情况
在你的评论中,你提到了不同长度代码的问题。没有含糊不清的地方。在极端情况下,如果你的e比所有其他角色加起来都多,那么这棵树就会非常不平衡“e”将被编码为“1”,而所有其他字母将具有不同长度的代码,从0开始 是的,谢谢你的帮助!我会工作的。但我有二进制文件中的代码,它是:0101010101110101010101010。我需要找到A是000。“A”,“A:”和“;”有不同的长度代码。这有用吗?如果需要,我可以更详细地介绍步骤3。我用哈夫曼在内存有限的嵌入式软件中为“标签”节省空间。