在C ++中将值读入3D数组

时间:2017-07-10 17:55:24

标签: c++ io

我是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;
}

似乎只读取最后一个值。

关于如何修改此读取所有值的任何建议?

1 个答案:

答案 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);

意外地,最后一个值位于正确的记忆位置,以便您可以识别它。