在Huffman中区分二进制头和编码二进制

时间:2016-06-28 01:29:05

标签: c++ huffman-code

我正在创建一个基本的霍夫曼编码/解码工具。我发现了this问题帮助我实现了以二进制形式存储生成的霍夫曼树的标题。我也可以使用树将文本编码/解码为二进制文件。所以该程序实际上有效,但我仍有问题。

目前标题和编码二进制文件位于不同的文件中,因为我无法找到一种方法将它们放入同一个文件中,这样我就可以在解码过程开始时轻松读取标题。在标题的一些"末尾硬编码"字符似乎是一种相当hacky的方式来做到这一点,更不用说有可能终止字符的一些初始位可能作为标题中编码树的一部分被读入,导致整个树被破坏。

虽然我的程序使用单独的标题和正文文件,但我想合并它们。关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

您不需要做任何特殊的事情来合并您的标题(树)和内容(霍夫曼编码的文本)。

如果您查看发布的问题here中的答案,并检查解码算法(那里的ReadNode(BitReader reader)伪代码函数),您可以看到算法停止读取树只是因为它全部读取 - 不是因为它到达了EOF角色或类似的东西。

它不需要搜索EOF,因为它仅为具有子节点(0位)的节点递归调用自身。一旦算法到达所有叶子,就不再有递归调用,因此读者将准确地定位在正确的位置,以便您开始阅读内容(在读取整个标题之后,没有额外的“标题结束”)指示。