2016-11-05 104 views
0

我在C++中实现霍夫曼编码,我可以成功地建立霍夫曼树,并可以编码/解码字符串。霍夫曼编码文件在c + +

我想要做的下一件事是能够编码/解码文件,但我有一些问题。 我正在使用bool载体来包含代码字。我的问题是:我只能写入字节到一个文件。我如何一点一滴地写作?有没有可以使用的图书馆?

另一件事是,如果我想解码文件,我需要树本身(或代码表)。序列化树的最佳方式是什么?

任何帮助将不胜感激。

+0

两种可能的选择:将位编码为字节。或者每位使用一个字节。 –

+0

这是你的格式规范,所以做你想要的。如果你想压缩比特位,那么一次加入8比特的比特向量。如果你想在字节对齐的块中编写你的代码,那就这样做。你可以把你的树变成一个数组(查看树遍历)或边界列表,然后写出你喜欢的东西。有太多的选项,因为你没有真正指定你已经有什么...... – BeyelerStudios

+0

至于你的第二个问题,基本上只有三种[遍历树]的方法(https://en.wikipedia.org/wiki/Tree_traversal)。选一个。而不是“显示”该树写入磁盘。在阅读文件时做相反的事。 –

回答

2

C++布尔向量的内部格式太不好了,因为它很可能已经打包了比特。

无论如何,你可以使用<<>>,并&运营商位装入在编码侧字节,以及以在解码侧解压缩比特。假设你知道一个字节是由8位组成的,那么这是很简单的。

至于发送霍夫曼码,请阅读关于经典霍夫曼码。你不需要发送代码,只需要每个符号的码长度。为了提高效率,长度序列本身可以通过游程和霍夫曼编码进行压缩。有关示例,请参阅Deflate format

+1

从霍夫曼教授那里得到一封死讯答案,很难想到有人在这个领域更专业。 –