Чтение переменной из файла .mat в C ++

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

save data x;

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

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

variable = matGetNextVariable(pmat, &name);

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

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

Я уже проверял этот вопрос, но, похоже, никто на него не ответил, Чтение файла .mat на 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);
}

Спасибо.


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


Ответы (1)


После долгих поисков я нашел ответ. Кто-то уже задавал вопросы, но по-другому. Ниже приводится ссылка на ответ. Надеюсь, это поможет другим. Matlab API читает файл .mat из c ++ с использованием контейнера STL

person nabeel    schedule 04.04.2016