C++ 中的霍夫曼编码文件
Huffman coding file in c++
我正在用 C++ 实现霍夫曼编码,我可以成功构建霍夫曼树并且可以 encode/decode 字符串。
接下来我想做的是 encode/decode 文件,但我遇到了一些问题。
我正在使用 bool 向量来包含代码字。我的问题是:我只能将字节写入文件。我如何一点一点地写?有没有我可以使用的图书馆?
另一件事是,如果我想解码文件,我需要树本身(或代码 table)。序列化树的最佳方法是什么?
如有任何帮助,我们将不胜感激。
太糟糕了,C++ 布尔向量的内部格式是未定义的,因为它很可能已经是压缩位了。
无论如何,您将使用 <<
、>>
和 &
运算符在编码端将位打包为字节,并在解码端将位解包边。假设您知道一个字节由八位组成,那么这就很简单了。
关于传输霍夫曼码,请阅读规范霍夫曼码。您不需要发送代码,只需发送每个符号的代码长度(以位为单位)。为了提高效率,可以使用 运行-length 和 Huffman 编码对长度序列本身进行压缩。有关示例,请参见 Deflate format。
我正在用 C++ 实现霍夫曼编码,我可以成功构建霍夫曼树并且可以 encode/decode 字符串。
接下来我想做的是 encode/decode 文件,但我遇到了一些问题。 我正在使用 bool 向量来包含代码字。我的问题是:我只能将字节写入文件。我如何一点一点地写?有没有我可以使用的图书馆?
另一件事是,如果我想解码文件,我需要树本身(或代码 table)。序列化树的最佳方法是什么?
如有任何帮助,我们将不胜感激。
太糟糕了,C++ 布尔向量的内部格式是未定义的,因为它很可能已经是压缩位了。
无论如何,您将使用 <<
、>>
和 &
运算符在编码端将位打包为字节,并在解码端将位解包边。假设您知道一个字节由八位组成,那么这就很简单了。
关于传输霍夫曼码,请阅读规范霍夫曼码。您不需要发送代码,只需发送每个符号的代码长度(以位为单位)。为了提高效率,可以使用 运行-length 和 Huffman 编码对长度序列本身进行压缩。有关示例,请参见 Deflate format。