【发布时间】:2019-12-10 13:13:19
【问题描述】:
我正在尝试将std::vector<bool> 的内容写入磁盘到二进制文件中。由于许多 STL 输出流的 write() 方法接受指向数组本身的指针,以及要写入的字节数,对于“正常”向量,我最终会做这样的事情:
std::vector<unsigned int> dataVector = {0, 1, 2, 3, 4};
std::fstream outStream = std::fstream("vectordump.bin", std::ios::out | std::ios::binary);
outStream.write((char*) dataVector.data(), dataVector.size() * sizeof(unsigned int));
outStream.close();
但是,std::vector<bool> 是一种特殊情况,因为 STL 实现允许将布尔值打包成单个位。因此,上述方法在技术上将无法始终如一地工作,因为未指定数据在内存中的精确布局方式。
有什么方法可以序列化/反序列化我的 bool 向量而无需打包/解包数据?
【问题讨论】:
-
解决方案似乎不是最好的,但我曾经用整数制作了一个辅助向量,并使用整数向量进行写入/读取。你使用哪个值来表示真假取决于你,但我认为有一些简单的选项可以使用;)
-
即使
unsigned int也可能有不同的大小,并且字节序可能因平台而异... -
最简单的解决方案似乎一开始就没有使用布尔向量......