【发布时间】:2010-08-09 07:37:38
【问题描述】:
我在尝试将向量 (std::vector) 序列化为二进制格式然后正确反序列化它并能够读取数据时遇到问题。这是我第一次使用二进制格式(我使用的是 ASCII,但现在太难使用了),所以我从一个整数向量开始。
每当我读回数据时,向量总是有正确的长度,但数据要么是 0,要么是未定义的,要么是随机的。
class Example
{
public:
std::vector<int> val;
};
写:
Example example = Example();
example.val.push_back(10);
size_t size = sizeof BinaryExample + (sizeof(int) * example.val.size());
std::fstream file ("Levels/example.sld", std::ios::out | std::ios::binary);
if (file.is_open())
{
file.seekg(0);
file.write((char*)&example, size);
file.close();
}
阅读:
BinaryExample example = BinaryExample();
std::ifstream::pos_type size;
std::ifstream file ("Levels/example.sld", std::ios::in | std::ios::binary | std::ios::ate);
if (file.is_open())
{
size = file.tellg();
file.seekg(0, std::ios::beg);
file.read((char*)&example, size);
file.close();
}
有谁知道我做错了什么或该做什么或能够指出我需要做的方向吗?
【问题讨论】:
-
欢迎来到 SO。要格式化代码块,请将整个代码缩进 4 个空格。
-
谢谢,格式让我抓狂。我一直在与其他人讨论我的问题,似乎我需要对向量中的每个元素以及向量的大小进行多次写入调用。
-
您可能想花一些时间阅读stackoverflow.com/editing-help。