c++ - 在 windows 和 linux 下用 ifstream 打开二进制 .ply 文件时的不同结果

标签 c++ linux windows ifstream

我正在尝试用 C++ 读取一个 .ply 文件并将几何信息保存在 vector 中(边界点是 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 下具有相同的值 (4)。

知道问题出在哪里吗?

谢谢你的帮助,

最佳答案

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

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

关于c++ - 在 windows 和 linux 下用 ifstream 打开二进制 .ply 文件时的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44787686/

相关文章:

c - 我的 realloc 函数返回段错误

.net - 有没有办法检查用户是否具有特定权限?

windows - JScript:如何运行外部命令并获取输出?

c++ - 如何将文件从回收站还原到特定位置?

c++ - 如何读取可能以字符串或数字开头的行?

python - 为 numpy 创建一个简单的 SWIG 类型映射

linux - 如何打印仅包含字母的单词?

c++ - 在 C++ 中使用来自类构造函数的参数初始化公共(public)属性

c++ - Variadic 模板化构造函数不接受 x 个参数

python - 如何使用 Python 通过 Unix pass 命令行程序自动设置密码