【发布时间】:2014-02-12 10:44:44
【问题描述】:
我正在使用 C++ 将 int 数组写入二进制文件,如下所示:
int * _row;
_row = new int[200];
// .. fill array
// outputs 8, so one integer should be 8 bytes long
cout << sizeof _row << endl;
ofstream fHandle;
fHandle.open("~/row.bin", ios::out | ios::trunc | ios::binary);
for (int ii=0;ii<200;ii++) {
fHandle.write( (char*)&_row[ii], sizeof _row );
}
fHandle.close();
现在当我在 MATLAB 中读取它时(如下所示),我没有得到原始数组。
fid = fopen("~/row.bin");
x = fread(fid, 'int32');
fclose(fid)
我意识到我应该使用由 8 位组成的数据类型(例如“int64”),但使用“int32”至少可以得到正确的值。 然而,每个值都会被读取两次!我对此没有任何解释。我最终得到一个大小为 400 的数组(这是有道理的,因为我正在阅读较小的块)。如果我选择“int64”,我会以正确的维度结束,但值是错误的。
你对此有什么解释吗?
【问题讨论】:
标签: c++ matlab int binaryfiles