我有一个 std::bitset,我想按位写入文件,但是 fstream 的 write 函数不支持这种操作。除了使用 string 将每个 8 位组转换为 char 并写入外,我想不到其他的方法... 你们知道什么好办法吗?
尝试:
#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;
}
嗯,有一种方法是使用字符串作为序列化方法。有一个bitset构造函数接受一个字符串参数,还有一个to_string()成员函数返回一个字符串。还有<<和>>帮助运算符,它们使用构造函数和to_string()函数进行流插入和提取。根据您的要求,这可能适合您。
对于我们在一个应用程序中来说,这还不够紧凑,所以我们最终编写了一个类,看起来像bitset(具有相同的接口),但它也可以作为字节流进行序列化,这意味着它具有返回指向底层字节数组的指针的函数。如果您有多个实现源代码可供参考,编写起来并不太困难。