我是C ++的新手,所以这应该是一个相当基本的问题。
假设我有bunny.voxel.ply
个文件。此文件以二进制形式写出,前4个字节对应于(整数)采样分辨率res
,下一个4 x res
x res
x res
对应于(单精度)浮点值的字节。
我想将这些值读入3D数组voxel
。我目前的代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* fp = fopen( "bunny.voxel.ply" , "rb" );
if (fp==NULL) {fputs ("File error",stderr); exit (1);}
int res;
fread( &res , 1 , sizeof(int) , fp );
float *voxel = new float[res*res*res];
fread(voxel , res * res * res , sizeof(float) , fp );
fclose( fp );
std::cout << "Hello, World!" << std::endl;
return 0;
}
似乎只读取最后一个值。
关于如何修改此读取所有值的任何建议?
答案 0 :(得分:1)
fread
的参数是
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
因此,您可能应该更换第2和第3个参数的顺序:
int count = res*res*res;
float *voxel = new float[count];
fread(voxel, sizeof(float), count, fp);
意外地,最后一个值位于正确的记忆位置,以便您可以识别它。