我有一个在mac和linux上成功编译和运行的软件框架。我现在试图将它移植到windows(使用mingw)。到目前为止,我已经在Windows下编译和运行了软件,但它不可避免地出现了错误。特别是,我在读取macos(或linux)中序列化的数据到程序的windows版本(segfaults)时遇到了问题。将数据序列化代码从C++ linux/mac移植到C++窗口
序列化过程将原始变量(长整数,整数,双精度等)的值序列化到磁盘。
这是我使用的代码:
#include <iostream>
#include <fstream>
template <class T>
void serializeVariable(T var, std::ofstream &outFile)
{
outFile.write (reinterpret_cast < char *>(&var),sizeof (var));
}
template <class T>
void readSerializedVariable(T &var, std::ifstream &inFile)
{
inFile.read (reinterpret_cast < char *>(&var),sizeof (var));
}
所以就节省了一堆的变量的状态,我呼吁serializeVariable依次对于每个变量。然后为了读取数据,按照保存的顺序调用readSerializedVariable。例如保存:
::serializeVariable<float>(spreadx,outFile);
::serializeVariable<int>(objectDensity,outFile);
::serializeVariable<int>(popSize,outFile);
,并阅读:
::readSerializedVariable<float>(spreadx,inFile);
::readSerializedVariable<int>(objectDensity,inFile);
::readSerializedVariable<int>(popSize,inFile);
但在Windows,这个读取序列数据的失败。我猜测,Windows以不同的方式序列化数据。我想知道是否有办法修改上面的代码,以便保存在任何平台上的数据可以在任何其他平台上读取......任何想法?
干杯,
本。
什么是T型?例如,我可以为不同的编译器考虑不同的sizeof(var)值 - 例如结构元素对齐的结果。想想另一个序列化机制,比如XML。例如, –
这些类型是原始变量(请参阅编辑过的文章)。例如,我不知道编译器可能会为sizeof(long)产生不同的值。你确定?我的意思是,我认为总是4字节长,char总是1字节,独立于编译器等。 –
是的,我们处理几个平台,一些长4字节,有些字节8字节。我相信该标准只规定了数据类型的最小值,而不是确切的字节数。 – Dan