这个问题在这里已经有答案了:

我有一个 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;
}

其他提示

嗯,“一种”方法是使用字符串作为序列化方法。有一个接受字符串参数的位集构造函数,还有一个返回 1 的 to_string() 成员函数。还有 << 和 >> 辅助运算符,它们使用构造函数和 to_string() 函数进行流插入和提取。根据您的要求,这可能适合您。

这对于我们在一个应用程序中来说不够紧凑,因此我们最终编写了一个看起来像 bitset (具有相同接口)的类,但它也可以序列化为字节流,这意味着它具有返回指向底层的指针的函数组成它的字节数组。如果您有几个实现的源代码可供查看,那么编写起来并不是太难。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top