在windows和linux下使用ifstream打开二进制.ply文件时会出现不同的结果 我试图用C++读取一个 .PLA/文件,并将几何信息保存在向量中(边界点是代码>浮点< /代码>,边三角形是代码> int < /COD>。代码在Linux下工作,但当我在Windows下使用它时,它的行为没有预期。

在windows和linux下使用ifstream打开二进制.ply文件时会出现不同的结果 我试图用C++读取一个 .PLA/文件,并将几何信息保存在向量中(边界点是代码>浮点< /代码>,边三角形是代码> int < /COD>。代码在Linux下工作,但当我在Windows下使用它时,它的行为没有预期。,c++,linux,windows,ifstream,C++,Linux,Windows,Ifstream,以下是代码的精简版本: #include <iostream> #include <iomanip> #include <fstream> #include <vector> using namespace std; string FilenamePLY; int NumberBorderPoint = 1572866; int BorderNumberTriangle = 3145728; char numFloat; char numI

以下是代码的精简版本:

#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;
}
而在Linux下,输出为:

4
4
我的感觉是read函数没有获得正确的值来分隔二进制文件中的数字,但是
sizeof(float)
sizeof(int)
在Windows和Linux(4)下都具有相同的值

你知道问题出在哪里吗


感谢您的帮助,

尝试打开文件进行二进制阅读:

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

尝试打开文件进行二进制读取:

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

以二进制模式打开该文件,并验证是否已打开该文件


您当前还正在将sizeof(float)的数据读取到一个字符中-此时它将覆盖其他数据(numFloat,numInt)

以二进制模式打开文件并验证您是否打开了该文件


您当前还正在将sizeof(float)的数据读取到一个字符中-它将在该点覆盖其他数据(numFloat,numInt)

您没有错误捕获。您是否调试并测试了打开文件的错误?您是否可以显示正在读取的输入文件的示例?您没有错误捕获。您是否调试并测试了打开文件的错误?您是否可以显示正在读取的输入文件的示例?