如何在C++中序列化霍夫曼树
How to serialize the Huffman tree in c++
如标题所示,我想将霍夫曼树序列化为编码文件的 header。
我看到这个问题:efficient way to storing huffman tree
我明白它是如何工作的,但我不能应用它,我写了这段代码:
typedef Node<char,unsigned long> Node;
void Encoder::EncodeNode(Node node)
{
if (node.left == &Node::NIL and node.right == &Node::NIL)
{
writeBit(1);
outFile << node.first;
}
else
{
writeBit(0);
EncodeNode(*node.left);
EncodeNode(*node.right);
}
}
这是我用来编码字符的 writeBit 函数:
void Encoder::writeBit(unsigned short bit)
{
if(bit < 2){//if not EOF
if(bit){
byteBuffer |= (1 << (7 - byteCursor));
}
byteCursor++;
if (byteCursor == 8) {
outFile << byteBuffer;
byteBuffer = 0;
byteCursor = 0;
}
}else{
outFile << bit;
}
}
但是有了这个函数,我一点也写不出来。
有什么建议吗?
更新:
能顺利吗?:
void Encoder::EncodeNode(Node node)
{
if (node.left == &Node::NIL and node.right == &Node::NIL)
{
char c = node.first;
writeBit(1);
for (unsigned short i = 0; i < 8; i++) {
writeBit(c & (1 << (7-i)));
}
}
else
{
writeBit(0);
EncodeNode(*node.left);
EncodeNode(*node.right);
}
}
查看 Ezran 对您所链接问题的回答(与已接受的答案相反)。这是最有效,也是最简单的方法。您根本不需要对树结构进行编码。您只需要发送每个符号的位数。
如标题所示,我想将霍夫曼树序列化为编码文件的 header。 我看到这个问题:efficient way to storing huffman tree
我明白它是如何工作的,但我不能应用它,我写了这段代码:
typedef Node<char,unsigned long> Node;
void Encoder::EncodeNode(Node node)
{
if (node.left == &Node::NIL and node.right == &Node::NIL)
{
writeBit(1);
outFile << node.first;
}
else
{
writeBit(0);
EncodeNode(*node.left);
EncodeNode(*node.right);
}
}
这是我用来编码字符的 writeBit 函数:
void Encoder::writeBit(unsigned short bit)
{
if(bit < 2){//if not EOF
if(bit){
byteBuffer |= (1 << (7 - byteCursor));
}
byteCursor++;
if (byteCursor == 8) {
outFile << byteBuffer;
byteBuffer = 0;
byteCursor = 0;
}
}else{
outFile << bit;
}
}
但是有了这个函数,我一点也写不出来。 有什么建议吗?
更新: 能顺利吗?:
void Encoder::EncodeNode(Node node)
{
if (node.left == &Node::NIL and node.right == &Node::NIL)
{
char c = node.first;
writeBit(1);
for (unsigned short i = 0; i < 8; i++) {
writeBit(c & (1 << (7-i)));
}
}
else
{
writeBit(0);
EncodeNode(*node.left);
EncodeNode(*node.right);
}
}
查看 Ezran 对您所链接问题的回答(与已接受的答案相反)。这是最有效,也是最简单的方法。您根本不需要对树结构进行编码。您只需要发送每个符号的位数。