【问题标题】:How to write bitset data to a file? [duplicate]如何将位集数据写入文件? [复制]
【发布时间】:2009-04-22 17:41:06
【问题描述】:

我有一个 std::bitset 我想逐位写入文件,但 fstream 的写入函数当然不支持这一点。除了使用字符串将每个 8 位组转换为 char 并编写它之外,我想不出其他方法......

有人知道什么好方法吗?

【问题讨论】:

  • 那很不幸,这种实现会很好用......

标签: c++ fstream bitset


【解决方案1】:

试试:

#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;
}

【讨论】:

  • 不确定我是否理解...什么是“面具”?为什么要先创建一个 const bitset,然后再创建一个同名的?
  • 更新了我的答案,看看吧!这些是快速编辑 SGI 的 bitset 示例的产物。
  • 好的,很好。适用于 ofstream 运算符
  • 还添加了 fstream::write() 示例。
  • 您可以通过将 8 位组打包成一个字节并将输出写入二进制文件来节省 87.5% 的空间。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2018-06-24
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多