需要包含matlab的库mat.h和matrix.h
VC++目录设置如下,大家根据自己matlab的目录进行设置
链接器/输入/附加依赖项:添加以下lib
libmat.lib
libeng.lib
libmex.lib
libmx.lib
matread源代码如下:(读取mat文件中的single/unit64数组到vector变量,可以自行更改用于读取double等)
filename是要读取的mat文件名,varname是mat文件中要读取的变量名
#pragma once
#include <mat.h>
#include <matrix.h>
#include <vector>
template<typename T>
void matread(const char *filename, const char *varname, vector<T>& v)
{
MATFile *pmat = matOpen(filename, "r");
if (pmat == NULL) return;
mxArray *arr = matGetVariable(pmat, varname);
if (typeid(float) == typeid(T)) {
if (arr != NULL && mxIsSingle(arr) && !mxIsEmpty(arr)) {
mwSize numOfElems = mxGetNumberOfElements(arr);
float *arrPr = mxGetSingles(arr);
if (arrPr != NULL) {
v.reserve(numOfElems);
v.assign(arrPr, arrPr + numOfElems);
}
}
}
else if (typeid(int) == typeid(T) || typeid(size_t) == typeid(T)) {
if (arr != NULL && mxIsUint64(arr) && !mxIsEmpty(arr)) {
mwSize numOfElems = mxGetNumberOfElements(arr);
mwSize *arrPr = mxGetUint64s(arr);
if (arrPr != NULL) {
v.reserve(numOfElems);
v.assign(arrPr, arrPr + numOfElems);
}
}
}
mxDestroyArray(arr);
matClose(pmat);
}
调用:
int main()
{
const char *filename_mat = "file.mat";
vector<float> var_from_mat;
matread(filename_mat, "varname", var_from_mat);
}
读取mat文件中的结构数组...稍后补充
2023.10.22