Запись большой двоичной строки в двоичный файл - PullRequest
1 голос
/ 26 сентября 2019

У меня есть большая (длина 122 КБ) строка из 0 и 1 (010011101 ...), которую нужно записать в двоичный файл в виде 0 и 1, а не их символьных представлений.

Что я 'мы пробовали:

  • Вывод двоичной строки в двоичный файл в C ++ - это хорошее решение, однако у меня будет несколько строк разного размера, а битрейту нужен размерНасколько мне известно, во время выполнения.
  • В библиотеке Stanford C ++ есть функция writebit, которая работает, но это происходит слишком долго, поскольку каждый бит открывает функцию записи.
  • различные способы реализацииoutputfile.write (), но все они пишут символьные представления 0 и 1.

В идеале, я бы предпочел использовать стандартные библиотеки.Заранее благодарю за любую помощь.

1 Ответ

2 голосов
/ 26 сентября 2019

Вы можете объединить восемь бит каждый в один символ:

int n = 0;
uint8_t value = 0;
for(auto c : str)
{
    value |= static_cast<unint8_t>(c == '1') << n;
    if(++n == 8)
    {
        // print value or buffer it elsewhere, if you want
        // to print greater chunks at once
        n = 0;
        value = 0;
    }
}
if(n != 0)
{
    // one partial byte left
}

Байты имеют фиксированное количество бит (обычно восемь), и вы не можете просто отбросить их, они будут идтив ваш файл.Таким образом, вам нужно каким-то образом указать при повторном декодировании, сколько бит отбрасывать.Вы можете добавить дополнительный байт, сколько битов является действительным в самом последнем байте, вы можете кодировать общее количество бит каким-либо образом (и можете проверить, были ли прочитаны достаточные байты), ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...