libmatio是一个开源mat文件读写库,该库已经应用到了Scilab中。单独使用这个库,能够用C/C++实现对mat文件的读写(目前只支持版本6以下)。
一、读普通数组
int start[2]={0,0},stride[2]={1,1},edge[2]={1,1}, err = 0;
double ptr[1];
mat_t *mat;
matvar_t *matvar;
mat = Mat_Open("digital_parameter_pro_v6.mat",MAT_ACC_RDWR);
matvar = Mat_VarReadInfo(mat,"MaxPixelValue");
Mat_VarReadData(mat,matvar,ptr,start,stride,edge);
Mat_VarFree(matvar);
Mat_Close(mat);
二、读cell
/*以下代码测试读取cell型数据*/
double* data;
data = (double*)malloc(6*6*sizeof(double));
mat_t *mat;
matvar_t *matvar;
matvar_t **matCellvar;
int start[2],stride[2],edge[2], err;
start[0]=0;start[1]=0;//数组起始下标;第一个数下标为0
stride[0]=1;stride[1]=1;//读数组是跨步步距,参照Matlab中的格式——start:stride:edge
edge[0]=2;edge[1]=2;//数组终止下标
err = 0;
mat=Mat_Open("left_200_080305_v6.mat",MAT_ACC_RDONLY);
matvar = Mat_VarReadInfo(mat,"ProfilesCov");//读入mat文件中的cell变量ProfilesCov
start[0]=0;start[1]=0;//数组起始下标;第一个数下标为0
stride[0]=1;stride[1]=1;//读数组是跨步步距,参照Matlab中的格式——start:stride:edge
edge[0]=2;edge[1]=60;//数组终止下标
matCellvar = Mat_VarGetCells(matvar,start,stride,edge);
start[0]=0;start[1]=0;//数组起始下标;第一个数下标为0
stride[0]=1;stride[1]=1;//读数组是跨步步距,参照Matlab中的格式——start:stride:edge
edge[0]=6;edge[1]=6;//数组终止下标
Mat_VarReadData(mat,*matCellvar,data,start,stride,edge);
int i;
for(i=0;i<36;i++)
{
printf("%f/n",data[i]);
}