我有一个 std::bitset 我想逐位写入文件,但是 fstream 的 write 函数当然不支持这个。除了使用字符串将每个 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 构造函数,还有一个返回 1 的 to_string() 成员函数。还有 << 和 >> 辅助运算符使用构造函数和 to_string() 函数进行流插入和提取。根据您的要求,这可能对您有用。
在一个应用程序中这对我们来说不够紧凑,所以我们最终编写了一个看起来像 bitset 的类(具有相同的接口),但它也可以作为字节流序列化,这意味着它具有返回指向底层的指针的函数组成它的字节数组。如果您有几个实现的源代码可以查看,那么编写起来并不难。