Как записать байт (ы) в файл в C ++? - PullRequest
0 голосов
/ 17 февраля 2020

Я создал битовый набор, используя std::bitset<8> bits, что эквивалентно 00000000, т. Е. 1 байту. У меня есть выходной файл, определенный как std::ofstream outfile("./compressed", std::ofstream::out | std::ofstream::binary), но когда я пишу bits, используя outfile << bits, содержимое outfile становится 00000000 , но размер файла составляет 8 байт. (каждый бит bits в конечном итоге занимает 1 байт в файле) . Есть ли способ действительно записать байт в файл? Например, если я пишу 11010001, то это должно быть записано в байтах, а размер файла должен быть 1 байт, а не 8 байт. Я пишу код для кодера Хаффмана и не могу найти способ записать закодированные байты в выходной сжатый файл.

1 Ответ

1 голос
/ 17 февраля 2020

Проблема в operator<< - метод кодирования текста, даже если вы указали std::ofstream::binary. Вы можете использовать put для записи одного двоичного символа или write для вывода нескольких символов. Обратите внимание, что вы несете ответственность за преобразование данных в char представление.

std::bitset<8> bits = foo();
std::ofstream outfile("compressed", std::ofstream::out | std::ofstream::binary);

// In reality, your conversion code is probably more complicated than this
char repr = bits.to_ulong();

// Use scoped sentries to output with put/write
{
    std::ofstream::sentry sentry(outfile);
    if (sentry)
    {
        outfile.put(repr);                  // <- Option 1
        outfile.write(&repr, sizeof repr);  // <- Option 2
    }
}
...