c++; 我在C++中实现赫夫曼编码,我可以成功地构建Huffman tree并可以对字符串进行编码/解码。

c++; 我在C++中实现赫夫曼编码,我可以成功地构建Huffman tree并可以对字符串进行编码/解码。,c++,serialization,bit-manipulation,huffman-code,C++,Serialization,Bit Manipulation,Huffman Code,我想做的下一件事是能够编码/解码文件,但我有几个问题。 我用布尔向量来包含密码。我的问题是:我只能将字节写入文件。我怎么一点一点地写?也许有我可以使用的图书馆吗 另一件事是,如果我想解码一个文件,我需要树本身(或代码表)。序列化树的最佳方法是什么 P>VC++向量的内部格式是不明确的,因为它很可能已经被打包位。 无论如何,您将使用和&运算符在编码端将位打包成字节,并在解码端解压位。假设您知道一个字节是由八位组成的,那么这是很容易做到的 至于传输哈夫曼码,请阅读规范哈夫曼码。您不需要发送代码,只

我想做的下一件事是能够编码/解码文件,但我有几个问题。 我用布尔向量来包含密码。我的问题是:我只能将字节写入文件。我怎么一点一点地写?也许有我可以使用的图书馆吗

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


<> P>VC++向量的内部格式是不明确的,因为它很可能已经被打包位。 无论如何,您将使用
&
运算符在编码端将位打包成字节,并在解码端解压位。假设您知道一个字节是由八位组成的,那么这是很容易做到的


至于传输哈夫曼码,请阅读规范哈夫曼码。您不需要发送代码,只需发送每个符号的代码长度(以位为单位)。为了提高效率,长度序列本身可以通过游程长度和哈夫曼编码进行压缩。请参阅一个例子。

< P>太糟糕的是,C++的布尔向量的内部格式是不明确的,因为它很可能已经被打包位。 无论如何,您将使用
&
运算符在编码端将位打包成字节,并在解码端解压位。假设您知道一个字节是由八位组成的,那么这是很容易做到的


至于传输哈夫曼码,请阅读规范哈夫曼码。您不需要发送代码,只需发送每个符号的代码长度(以位为单位)。为了提高效率,长度序列本身可以通过游程长度和哈夫曼编码进行压缩。有关示例,请参见。

两种可能的选择:将位编码为字节。或者每一位使用一个字节。这是您的格式规范,所以按您的要求执行。如果你想把位压缩,那么把位向量连接起来,一次写入8位。如果您想在字节对齐的块中编写代码,请这样做。您可以将树转换为数组(查看树遍历)或边列表,然后按照自己的喜好编写。有太多的选择,因为你没有真正指定你已经有了什么…至于你的第二个问题,基本上只有三种方法来解决。挑一个。将树写入磁盘,而不是“显示”。读取文件时,请执行相反的操作。请记住,当您再次读取树时,您可能处于不同的CPU体系结构,因此为文件/流选择一个endianess,例如,在生产者上使用hton,在消费者上使用ntoh。两个可能的选择可能重复:将位编码为字节。或者每一位使用一个字节。这是您的格式规范,所以按您的要求执行。如果你想把位压缩,那么把位向量连接起来,一次写入8位。如果您想在字节对齐的块中编写代码,请这样做。您可以将树转换为数组(查看树遍历)或边列表,然后按照自己的喜好编写。有太多的选择,因为你没有真正指定你已经有了什么…至于你的第二个问题,基本上只有三种方法来解决。挑一个。将树写入磁盘,而不是“显示”。在读取文件时,请执行相反的操作。请记住,当您再次读取目录树时,您可能处于不同的CPU体系结构,因此为文件/流选择一个endianess,例如,在生产者上使用hton,在消费者上使用ntoh。可能重复Short,但无法从霍夫曼教授那里获得死后的答案,很难想象有人在这一领域更专业……除了从哈夫曼教授那里得到一个死后的答案,很难想象有人在这一领域更专业。。。