Как записать данные битового набора в файл?[дубликат]

StackOverflow https://stackoverflow.com/questions/778378

  •  13-09-2019
  •  | 
  •  

Вопрос

На этот вопрос уже есть ответ здесь:

У меня есть набор std::bitset, который я хотел бы записать в файл побитно, но, конечно, функция записи fstream не поддерживает это.Я не могу придумать другого способа, кроме преобразования каждой 8-битной группы в символ с использованием строки и написания этого...

Кто-нибудь знает хороший способ?

Это было полезно?

Решение

Пытаться:

#include <bitset>
#include <fstream>

int main() {
    using namespace std;
    const bitset<12> x(2730ul); 
    cout << "x =      " << x << endl;

    ofstream ofs("C:\\test.txt"); // write as txt
    if (ofs) {
        // easy way, use the stream insertion operator
        ofs << x << endl;

        // using fstream::write()
        string s = x.to_string();
        ofs.write(s.c_str(), s.length()); 
    }
    return 0;
}

Другие советы

Ну, «один» способ сделать это — использовать строку в качестве метода сериализации.Существует конструктор битового набора, который принимает строковый аргумент, и есть функция-член to_string(), которая возвращает его.Существуют также вспомогательные операторы << и >>, которые используют конструктор и функцию to_string() для вставки и извлечения потока.Это может сработать для вас в зависимости от ваших требований.

Это было недостаточно компактно для нас в одном приложении, поэтому мы в итоге написали класс, который выглядит как bitset (имеет тот же интерфейс), но при этом его можно сериализовать как поток байтов, то есть у него есть функции, которые возвращают указатели на базовый объект. массив байтов, который его составляет.Это было не так уж и сложно написать, если у вас есть исходники нескольких реализаций, которые можно просмотреть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top