Как записать данные битового набора в файл?[дубликат]
Вопрос
На этот вопрос уже есть ответ здесь:
У меня есть набор 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 (имеет тот же интерфейс), но при этом его можно сериализовать как поток байтов, то есть у него есть функции, которые возвращают указатели на базовый объект. массив байтов, который его составляет.Это было не так уж и сложно написать, если у вас есть исходники нескольких реализаций, которые можно просмотреть.