fwrite и fread между matlab и c / cpp - PullRequest
1 голос
/ 14 июня 2011

У меня проблема, когда я сохраняю одну переменную из 460 элементов в MATLAB, используя fwrite, и когда я пытаюсь прочитать в MATLAB, это нормально, но попытка получить доступ к тому же файлу bin с использованием fread в Visual C дает прекрасный результат для первых 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 голосов
/ 14 июня 2011

Windows, верно? Файлы по умолчанию открываются в текстовом режиме, а байт 26 интерпретируется как маркер EOF. Перепишите ваш fopen как fopen("r01.bin", "rb"), чтобы принудительно открыть файл в двоичном режиме.

0 голосов
/ 14 июня 2011

Вы уверены, что 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...