本文整理汇总了C++中HuffmanTree::loadFromFile方法的典型用法代码示例。如果您正苦于以下问题:C++ HuffmanTree::loadFromFile方法的具体用法?C++ HuffmanTree::loadFromFile怎么用?C++ HuffmanTree::loadFromFile使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类HuffmanTree
的用法示例。
在下文中一共展示了HuffmanTree::loadFromFile方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: bin
int
main(int argc, char ** argv)
{
if (argc != 4) // 检查参数数量
{
showUsage();
return 1;
}
else
{
filename = argv[1];
// 判断文件名的后缀是不是 ".hfm"
if (string(".hfm") != filename.substr(filename.length()-4, 4))
{
fprintf(stderr, "输入文件的后缀不是 .hfm 。\n");
return 1;
}
treeFilename = argv[2];
sscanf(argv[3], "%lu", &bitLength);
}
// 载入哈夫曼树
HuffmanTree tree;
tree.loadFromFile(treeFilename.c_str());
// 构造映射表
// 映射表是将字符映射到一个二进制序列的表
constructMapping(&tree, vector<int>());
// 打开待解码的文件
iBitFile bin((filename).c_str());
// 打开输出的文件
// file 定义在了本文件头部,为了方便函数 commitBuffer 而调整。
file = fopen((filename.substr(0, filename.length()-4)).c_str(), "wb");
// 解码
HuffmanTree * p = &tree;
for (size_t i=0; i<bitLength; ++i)
{
int bit = bin.readNextBit();
p = p->childs[bit];
if (p == NULL)
{
fprintf(stderr, "待解码文件和树文件似乎不是对应的。");
return 1;
}
if (p->key != -1)
{
writeToBuffer((unsigned char)p->key);
p = &tree;
}
}
commitBuffer(bufferpos);
fclose(file);
bin.close();
fflush(stdout);
return 0;
}