我有一个大型结构阵列,我试图输出到硬盘驱动器。我似乎能够写入硬盘驱动器(虽然很难通过查看二进制数据来验证),但是当我尝试读取它时,总是会出现乱码。任何想法我做错了什么?输出大型结构到HD
这里的结构配置:
class xyz
{
public:
double x, y, z;
};
class trianglePackage
{
public:
int score;
int position;
xyz contactCoordinates;
xyz normalVector;
xyz locatorOffset;
};
class quadanglesOutput
{
public:
int locator1position, locator2position, locator3position, locator4position;
xyz centroid;
int surfaceAreaScore;
int centroidDifferance1Score;
int centroidDifferance2Score;
int minDistance1Score;
int minDistance2Score;
int totalLocatorScore;
int totalHullScore;
int totalScore;
double surfaceArea;
double centroidDifferance1;
double centroidDifferance2;
double minDistance1;
double minDistance2;
int hull;
trianglePackage locator1, locator2, locator3, locator4;
};
和此处我使用的读/写功能:
void outputQuadangleOutput(quadanglesOutput* output, string description, param parameters)
{
string outputName = parameters.fileName + " " + description + ".bin";
cout << "Output " << outputName.c_str() << "...";
ofstream output2;
output2.open(outputName.c_str());
output2.write(reinterpret_cast<char*>(output), streamsize(parameters.topXlist * sizeof(quadanglesOutput)));
output2.close();
cout << "done" << endl;
}
void readIn(quadanglesOutput* pointer, param parameters, string description)
{
string fileName = parameters.fileName + " " + description + ".bin";
cout << "openining " << fileName << "...";
ifstream readFile;
readFile.open(fileName.c_str());
readFile.read(reinterpret_cast<char*>(pointer), (parameters.topXlist * sizeof(quadanglesOutput)));
readFile.close();
cout << "done" << endl;
}
通常结构的阵列在长度约100,但通常只有关于前25个回读正确,其他一切都是默认的未初始化数据。
我99%确定它的代码有问题,但是它有可能与四字节对齐有关吗?
谢谢。
嗯,它仍然在做和以前一样的事情。前25个阅读条目都很好,其余都是乱码。 – Faken 2010-08-21 07:28:00
二进制标志似乎甚至减少了正确读取值的数量,现在它只是在产生看似随机的输出之前读取前10个元素(而不是先前以十六进制代码输出“CD”)。 – Faken 2010-08-21 07:38:24
@faken:您是否使用二进制模式进行输入和输出? – 2010-08-21 10:48:26