当与Windows和Linux下的Ifstream相反的二进制文件时,结果不同



我正在尝试读取带有C 的.ply文件,并将几何信息保存在向量中(边界点为floats,边框三角形为int's。代码在Linux下工作,但是当我尝试时,要在Windows下使用它,它的行为不按预期进行。

这是代码的修剪版本:

#include <iostream>
#include <iomanip>
#include <fstream>
#include <vector>
using namespace std;
string FilenamePLY;
int NumberBorderPoint = 1572866;
int BorderNumberTriangle = 3145728;
char numFloat;
char numInt;
int main(int argc, char** argv)
{
    FilenamePLY = "file_test.ply";
    ifstream fin(FilenamePLY.c_str());
    for (int i = 0; i < NumberBorderPoint; i++){
            fin.read(&numFloat, sizeof(float));
            for (int j = 0; j < 3; j++) {
                fin.read(&numFloat, sizeof(float));
            }
    }
    cout << fin.gcount() << endl;
    for (int i = 0; i<BorderNumberTriangle; i++){
            fin.read(&numInt, sizeof(int));
            for (int j = 0; j<3; j++)   {
                fin.read(&numInt, sizeof(int));
            }
    }
    cout << fin.gcount() << endl;
    return 0;
}

在Windows输出下编译和执行的代码:

0
0

在Linux下,输出为:

4
4

我的感觉是,读取函数无法获得正确的值以将二进制文件中的数字分开,但是sizeof(float)sizeof(int)在Windows和Linux下都具有相同的值。

关于问题所在的任何想法?

感谢您的帮助,

尝试打开 binary 阅读的文件:

ifstream fin(FilenamePLY.c_str(), std::ios::binary );

以二进制模式打开文件并验证您打开文件。

您当前还在将SizeOf(float(的数据读取到一个字符中 - 它将覆盖其他数据(Numfloat,numint(

最新更新