霍夫曼编码,使用位写入文件

时间:2014-12-02 18:36:19

标签: c++ encoding

我写了霍夫曼算法,它构建了树。 在字符串中有1和0的序列之后。 如何将它们按位进入文件?在互联网上,我找到了代码:

ofstream fout("out.txt", ios::out | ios::binary);
for each(char s in bnr)
{
    buf = buf | s << (7 - count);
    count++;
    if (count == 8)
    {
        count = 0;
        fout << buf; 
        cout << buf;
        buf = 0;
    }
}

因此,例如,我有字符串&#34; ab&#34;,使用算法我得到字符串&#34; 01&#34;,下面的代码不会在out.txt中放任何东西,即问题。 请描述此任务的位操作,或描述将位写入文件的不同方法。

我试图不使用STL,因为我的老师禁止使用STL。

1 个答案:

答案 0 :(得分:1)

假设字符串由ascii字符'0'和'1'组成,那么您需要对示例代码稍作更改。这个例子有大部分逻辑。

    unsigned char buf = 0;
    int count = 0;
    int i = 0;
    while(s[i] != '\0')
    {
        buf = buf | ((s[i++]-'0') << (7 - count));
        count++;
        if (count == 8)
        {
            count = 0;
            fout << buf; 
            buf = 0;
        }
    }
    if(count != 0)
        fout << buf;