我有这两个结构,我需要存储在文件中。我找不到一个很好的方法来将它们解析成一个文件,而不用解析这个结构体,并将它写成一个文本文件,这比我想要的效率低得多。将最基本的结构转换为文件的最简单方法是什么?结构是低于如何将结构存储在文件中以轻松重新加载?
struct object
{
unsigned short id;
float x;
float y;
unsigned short type;
unsigned char flags;
};
struct sector
{
unsigned long id;
unsigned long neighbors[4]; // North,East,South,West
std::vector<object> objects;
};
我试过下面的代码写入到一个文件的结构,但它不工作得很好。执行后文件的大小只有4.7kb,但它应该大得多。
sector s;
object o;
s.id = 1;
s.neighbors = {2, 3, 4, 5};
o.id = 1; o.x = 2.0f; o.y = 3.0f; o.type = 4; o.flags = 6;
for(int i = 0; i < 65536; i++)
{
s.objects.push_back(o);
o.id += 1; o.x += 1.0f; o.y += 1.0f; o.type += 1; o.flags += 1;
}
ofstream os("world.dat", ios::binary|ios::out);
s.objects.resize(s.objects.size());
int size = s.objects.size() * sizeof(object);
os.write((char*)&size, sizeof(int));
os.write((char*)&s, size);
os.close();
有什么建议?
您是否尝试输出将内存直接保存到磁盘?例如,从`&o`到`byte`数组的`memcpy`,并将其保存为二进制数据到磁盘 – Itsik 2010-12-21 20:38:04
那么如果它只有4.7kb?你有没有试过从磁盘读回它,看它是否有效?如果是,你就设置好了。 – 2010-12-21 20:41:21
@Itsik基本上就是他没有将数据复制到内存中的差异位置。 – 2010-12-21 20:41:54