Я делаю программу, в которой, я делаю некоторую обработку в 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);
}
Спасибо.
По умолчанию MATLAB будет писать целые числа как плавающие по двойной точности, а не как целые числа. Это может быть вашей проблемой, но это невозможно сказать, поскольку вы не указали никакой информации о своем коде. Другое решение - записать ваш файл .mat в виде версии 7.3 (добавить «-v7.3» в вызов сохранения). Затем он будет записывать файл как файл HDF5, и вы можете использовать зрелый API с открытым исходным кодом HDF5 C++ для чтения данных. – Justin
@ Юстин благодарю вас за ответ. Я обновил вопрос и включил мой код. Не могли бы вы увидеть код, если я что-то упустил в коде? – nabeel