Побитно записать в файл зашифрованный алгоритмом Хаффмана код

Рейтинг: 0Ответов: 1Опубликовано: 02.12.2014

Привет, ХэшКод. Я написал алгоритм Хаффмана, построил дерево, получил новые коды символов, но никак не могу записать их побитово в файл. Имеется массив(string) единиц и нулей, в интернете нашел код:

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;
    }
}

Но, он не работает, помогите пожалуйста и, по возможности, объясните на примере как правильно выполнять побитовые операции. Заранее спасибо!

UPD: Если кому нужно

ofstream fout("outcod.bin", ios::out | ios::binary);
unsigned char buf = 0;
int count = 0 , global_counter=0;
for each(unsigned char s in bnr)
{
    buf = buf | (s & 1) << (7 - count);
    count++;
    global_counter++;
    if (count == 8)
    {
        count = 0;
        fout << buf; 
        buf = 0;
    }
}
if (count>0)
{
    fout << buf;
}

Ответы

▲ 1

Опять до конца не понял.

В s у Вас все 8 бит значащие или один бит или s = '1' или '0' т.е. символы?

Если все значащие, то просто пишите s в файл (и никакой цикл с buf не нужен).

Если s это ASCII код цифр 0, 1, то

    buf = buf | ((s - '0') << (7 - count));