2016-04-04 2 views
0

Я делаю программу, в которой, я делаю некоторую обработку в MATLAB затем сохранить результат в .mat файл, используя следующую команду в MATLAB,Чтение переменной из .mat файла в C++

save data x; 

пусть допускают значение от x = 2,

Теперь я читаю тот же файл data.mat из программы на C++ в Visual Studio 2010. Моя программа компилируется, и я также могу отлично читать имя массивов и его размеры .. Теперь проблема когда я использую следующую команду, я не могу прочитать точное значение x. Он показывает мне некоторые случайные значения каждый раз, когда я запускаю программу.

variable = matGetNextVariable(pmat, &name); 

сейчас значение переменной = 50779048 ..

Просьба направить меня, где я делаю ошибки. значение переменной должно быть 2, потому что я сэкономил 2 из MatLab cammand ..

я уже проверить этот вопрос, но, кажется, никто не ответил, Reading .mat file in C++

void main(int argc, char **argv) 
{ 
    MATFile *pmat; 
    const char* name=NULL; 
    mxArray *pa; 

    /* open mat file and read it's content */ 
    pmat = matOpen("data.mat", "r"); 
    if (pmat == NULL) 
    { 
     printf("Error Opening File: \"%s\"\n", argv[1]); 
     return; 
    } 

    /* Read in each array. */ 
    pa = matGetNextVariable(pmat, &name); 
    while (pa!=NULL) 
    { 
     /* 
     * Diagnose array pa 
     */ 
     printf("\nArray %s has %d dimensions.", name, 
       mxGetNumberOfDimensions(pa)); 

     //print matrix elements 
     printf("\ndata %d",pa); 

     //get next variable 
     pa = matGetNextVariable(pmat,&name); 

     //printf("\ndata %d",pa); 
     //destroy allocated matrix 
     mxDestroyArray(pa); 
    } 

    matClose(pmat); 
} 

Спасибо.

+0

По умолчанию MATLAB будет писать целые числа как плавающие по двойной точности, а не как целые числа. Это может быть вашей проблемой, но это невозможно сказать, поскольку вы не указали никакой информации о своем коде. Другое решение - записать ваш файл .mat в виде версии 7.3 (добавить «-v7.3» в вызов сохранения). Затем он будет записывать файл как файл HDF5, и вы можете использовать зрелый API с открытым исходным кодом HDF5 C++ для чтения данных. – Justin

+0

@ Юстин благодарю вас за ответ. Я обновил вопрос и включил мой код. Не могли бы вы увидеть код, если я что-то упустил в коде? – nabeel

ответ