在matlab和c / cpp之间进行fwrite和fread

时间:2011-06-14 07:37:07

标签: c++ c matlab

我在使用fwrite在MATLAB中保存460个元素的单个变量时遇到问题,当我尝试在MATLAB中读取它很好但是尝试使用Visual C中的fread访问相同的bin文件时,为前88个值提供了良好的结果或者它然后它经历EOF左右,例如它没有给出其余元素所需的结果。用于Visual C的代码如下所示。

虽然过去在其他论坛的帖子中也提到了这个问题,但答案并没有解决问题。

void main() 
{
FILE *p;
long lsize;
float *temp;
int i;
size_t nn;
// Name of file
printf("Open File: r0.bin ");
p = fopen("r01.bin", "r");
// Determine the size of file
fseek (p, 0 , SEEK_END);
lsize = ftell (p);
rewind (p);
// Allocate memory
int a=sizeof(float);
lsize /= a;
temp = (float*) malloc (a*lsize);
   // Reading the file
nn= fread(temp,a,lsize,p);
// printing the results
for (i=0;i<lsize;i+=4)
  printf("\n %g %g %g %g",temp[i],temp[i+1],temp[i+2],temp[i+3] );
getch();
fclose(p);
} 

2 个答案:

答案 0 :(得分:0)

您确定MATLAB正在输出浮点数而不是双倍数吗?这段代码有点不必要了:

// get rid of these 2 statements
// int a=sizeof(float);
// lsize /= a;

temp = (float*) malloc( lsize );

// Reading the file
nn = fread( temp, 1, lsize, p );

答案 1 :(得分:0)

Windows,对吗?默认情况下,文件在文本模式下打开,字节26解释为EOF标记。将fopen重写为fopen("r01.bin", "rb")以强制以二进制模式打开文件。