MAT文件格式介绍

MAT文件格式如图4-1所示,包括文件头和数据。其中文件头(VariableInfo)部分主要包括文件描述、版本号及标识等,共占128字节;文件数据(Variable)包括数据类型、数据长度和数据三部分。因此,对MAT文件读取,可相应地分为两种,一是读取mxArray变量的头部信息和变量数据;二是仅读取mxArray变量的头部信息(表4-1)。

Document Image

图4-1 MAT文件存储格式

表4-1 C-MAT函数

序号 MAT函数 功 能
1 matOpen 打开一个MAT文件
2 matClose 关闭一个MAT文件
3 matGetDir 从MAT文件中获取mxArray矩阵列表
4 matGetFp 获取一个ANSI C文件指针给MAT文件
5 matGetVariable 从MAT文件中装载mxArray矩阵
6 matGetVariableInfo 从MAT文件中仅装载mxArray矩阵的头部信息
7 matDeleteVariable 从MAT文件中删除一个mxArray矩阵
8 matGetNextVariable 从MAT文件中装载下一个mxArray矩阵
9 matGetNextVariableInfo 从MAT文件中仅装载下一个mxArray矩阵的头部信息
10 matPutVariable 将一个mxArray矩阵写入MAT文件
11 matPutVariableAsGlobal 将mxArray矩阵作为全局空间的变量写入MAT文件

(1) matOpen

code.matlab
MATFile *matOpen(const char *filename, const char *mode);

参数:filename 欲打开的MAT文件名;

mode 欲打开MAT文件的读写模式(表4-2)

表4-2 MAT文件主要打开模式

参数(mode) 说 明
R Read模式,即只读模式
W Write模式,即只写模式
U Update模式,即可读取、写入模式
WZ Write&Zip模式,即压缩数据格式写入模式

返回:操作成功返回一个指向MAT文件的指针,否则,返回NULL。

(2) matClose

code.matlab
int matClose(MATFile *mfp);

参数:mfp  指向MATFile文件的指针。

返回:操作成功返回0,否则,返回EOF。

(3) matGetDir

code.matlab
char **matGetDir(MATFile *mfp, int *num);

参数:mfp  指向MATFile文件的指针;

num mxArray矩阵在MAT文件中的地址。

返回:操作成功,返回mxArray在MAT文件中的地址,并将mxArray长度值赋给num;若MAT文件中无mxArray,返回0;操作失败,返回NULL,num被赋为负值。

(4) matGetFp

code.matlab
FILE *matGetFp(MATFile *mfp);

参数:mfp  指向MATFile文件的指针。

返回:操作成功,返回一个FILE类型的指向MAT文件的指针;否则,返回NULL。

(5) matGetVariable

code.matlab
mxArray *matGetVariable(MATFile *mfp, const char *name);

参数:mfp 指向MATFile文件的指针;

name 从MAT文件中取出的mxArray变量名。

返回:操作成功,将MAT文件中的mxArray变量拷贝出并赋给分配地址的变量,该变量地址指针即为函数返回值;否则,返回NULL。

(6) matGetVariableInfo

code.matlab
mxArray *matGetVariableInfo(MATFile *mfp, const char *name);

参数:mfp 指向MATFile文件的指针;

name 从MAT文件中取出的mxArray变量名。

说明:仅读取MAT文件中mxArray变量的头部信息。

(7) matDeleteVariable

code.matlab
int matDeleteVariable(MATFile *mfp, const char *name);

参数:mfp 指向MATFile文件的指针;

name 从MAT文件中删除的mxArray变量名。

返回:操作成功,返回0;否则,返回非0值。

(8) matGetNextVariable

code.matlab
mxArray *matGetNextVariable(MATFile *mfp, const char *name);

参数:mfp 指向MATFile文件的指针;

name 从MAT文件中取出的mxArray变量名。

返回:操作成功,将MAT文件中的mxArray变量拷贝出并赋给分配地址的变量,该变量地址指针即为函数返回值;否则,返回NULL。

说明:与matGetVariable()函数不一样的是,matGetNextVariable允许用户将MAT文件中的mxArray变量逐个读出。

(9) matGetNextVariableInfo

code.matlab
mxArray *matGetNextVariableInfo(MATFile *mfp, const char *name);

参数:mfp 指向MATFile文件的指针;

name 从MAT文件中取出的mxArray变量名。

说明:将MAT文件中mxArray变量的头部信息逐个读出。

(10) matPutVariable

code.matlab
int matPutVariable(MATFile *mfp, const char *name, const mxArray *mp);

参数:mfp 指向MATFile文件的指针;

name 写入MAT文件的mxArray变量名;

mp 写入MAT文件的mxArray变量指针。

返回:操作成功,返回0;否则,返回非0值。

说明:若MAT文件中不存在name,将mp追加于mat文件尾;若name已存在于MAT文件中,则将其覆盖。

(11) matPutVariableAsGlobal

code.matlab
int matPutVariableAsGlobal(MATFile *mfp, const char *name, const mxArray *mp);

参数:mfp 指向MATFile文件的指针;

name 写入MAT文件的mxArray变量名;

mp 写入MAT文件的mxArray变量指针。

返回:操作成功,返回0;否则,返回非0值。

说明:与matPutVariable()函数不同的时,matPutVariableAsGlobal()将mxArray变量作为全局空间的变量写入MAT文件,当加载该变量时,也被当作全局空间中的变量加载。