Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 哈夫曼中二进制头和二进制编码的区分_C++_Huffman Code - Fatal编程技术网

C++ 哈夫曼中二进制头和二进制编码的区分

C++ 哈夫曼中二进制头和二进制编码的区分,c++,huffman-code,C++,Huffman Code,我正在创建一个基本的哈夫曼编码/解码工具。我发现了一个问题,它帮助我实现了一个以二进制形式存储生成的哈夫曼树的头。我还可以使用树将文本编码/解码为二进制文件。所以这个程序确实有效,但我仍然有一个问题 目前,头文件和编码的二进制文件在不同的文件中,因为我无法找到一种方法将它们放在同一个文件中,以便于我在解码过程开始时读取头文件。在某些“头的结尾”字符中进行硬编码似乎是一种相当粗糙的方法,更不用说终止字符的一些初始位可能会作为头中编码树的一部分读入,从而导致整个树损坏 虽然我的程序使用单独的头文件和

我正在创建一个基本的哈夫曼编码/解码工具。我发现了一个问题,它帮助我实现了一个以二进制形式存储生成的哈夫曼树的头。我还可以使用树将文本编码/解码为二进制文件。所以这个程序确实有效,但我仍然有一个问题

目前,头文件和编码的二进制文件在不同的文件中,因为我无法找到一种方法将它们放在同一个文件中,以便于我在解码过程开始时读取头文件。在某些“头的结尾”字符中进行硬编码似乎是一种相当粗糙的方法,更不用说终止字符的一些初始位可能会作为头中编码树的一部分读入,从而导致整个树损坏


虽然我的程序使用单独的头文件和正文文件,但我还是希望合并它们。有什么想法吗?

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

如果您查看您发布的问题的答案,并检查解码算法(此处的
ReadNode(BitReader reader)
伪代码函数),您可以看到算法停止读取树只是因为它读取了所有内容,而不是因为它达到了EOF字符或类似的内容

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