libmatio读取-v6 mat文件变量笔记

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]);
    }

你可能感兴趣的:(libmatio读取-v6 mat文件变量笔记)