Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
3年前关闭。
我正在用C ++实现霍夫曼编码,我可以成功地构建霍夫曼树并可以对字符串进行编码/解码。
我接下来要做的是能够对文件进行编码/解码,但是我有一些问题。
我正在使用布尔向量包含代码字。我的问题是:我只能将字节写入文件。我如何一点一点地写?也许我可以使用一个图书馆?
另一件事是,如果要解码文件,则需要树本身(或代码表)。序列化树的最佳方法是什么?
任何帮助将非常感激。
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
3年前关闭。
我正在用C ++实现霍夫曼编码,我可以成功地构建霍夫曼树并可以对字符串进行编码/解码。
我接下来要做的是能够对文件进行编码/解码,但是我有一些问题。
我正在使用布尔向量包含代码字。我的问题是:我只能将字节写入文件。我如何一点一点地写?也许我可以使用一个图书馆?
另一件事是,如果要解码文件,则需要树本身(或代码表)。序列化树的最佳方法是什么?
任何帮助将非常感激。
最佳答案
太糟糕了,C ++ bool矢量的内部格式是不确定的,因为它很有可能已经被打包了。
无论如何,您将使用<<
,>>
和&
运算符在编码侧将位打包为字节,并在解码侧将位解包。假设您知道一个字节由八位组成,那么这很简单。
至于发送霍夫曼码,请阅读有关规范霍夫曼码的信息。您无需发送代码,只需发送每个符号的代码长度(以位为单位)。为了提高效率,长度序列本身可以使用游程长度和霍夫曼编码进行压缩。有关示例,请参见Deflate format。
关于c++ - C++中的霍夫曼编码文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40439526/