gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:43 25 4
gpt4 key购买 nike

我正在尝试用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com