mat檔案格式解讀與使用

2022-03-19 10:48:49 字數 2341 閱讀 8517

上文介紹的是,運用matlab提供的api函式讀取mat文件的資料,從呼叫的方法可以看出,存在著很大的侷限性。因此本文從mat檔案的格式,運用c++程式設計方式讀取mat文件內容

擺脫matlab的api呼叫的束縛。

mat文件的格式

在matlab version 5中,mat檔案由乙個128位元組的檔案頭和若干個資料單元組成。每個資料單元有乙個8個位元組的tag,用於說明資料單元的占用的位元組數(不包括tag的8個位元組)和資料型別。

檔案頭header裡有124位元組的文字描述區域和4個位元組的flag。flag中的前2個位元組說明version,後兩個位元組是endian indicator。文字描述區域主要說明mat檔案的版本,建立於哪個平台,建立時間。flag中的version說明的是建立這個mat檔案的matlab的版本。edian indicator包括兩個字元m和i。

1

char mat_data_fhead1[51] =

2 ;

3char mat_data_fhead2[51] = ;

4char mat_data_fhead3[4] = ;

5char* datetime =null;

6time_t ltime;

7 tm*today;

89 time(ltime);

10 today = localtime(ltime);

11 datetime =asctime(today);

1213 fwrite(mat_data_fhead1, 1, 50

, fp);

14 fwrite(datetime, 1, 24

, fp);

15 fwrite(mat_data_fhead2, 1, 50

, fp);

16 fwrite(mat_data_fhead3, 1, 4, fp);

關於edian:endian: the ordering of bytes in a multi-byte number.

定義:在計算機系統體系結構中用來描述在多位元組數中各個位元組的儲存順序。相關概念還有msb(most significant bit/byte)和lsb(least significant bit/byte)。在所有的介紹位元組序的文章中都會提到位元組序分為兩類:big-endian和little-endian。引用標準的big-endian和little-endian的定義如下:

a) little-endian就是低位位元組排放在記憶體的低位址端,高位位元組排放在記憶體的高位址端。

b) big-endian就是高位位元組排放在記憶體的低位址端,低位位元組排放在記憶體的高位址端。

c) 網路位元組序:tcp/ip各層協議將位元組序定義為big-endian,因此tcp/ip協議中使用的位元組序通常稱之為網路位元組序。

ps:有些文章中稱低位位元組為最低有效位,高位位元組為最高有效位。

如果edian indicator中的值為mi,則讀取mat資料時應該用im的順序。若對於16bit的資料,則要進行兩個位元組資料的交換。

資料單元的格式

每個資料單元開頭都有8個位元組的tag用於說明資料單元儲存的資料型別和位元組數(不包括tag的8個位元組)。version5支援多種資料型別。data type中的值為1到14。除了用數值表示某種型別外,還用標識單詞聯絡一種型別。例如data type中儲存的是數值1時,代表8bit singed,它的標識單詞就為miint8,方便了使用者記憶。值14的標誌單詞是mimatrix,代表一種矩陣資料。

資料單元tag中的位元組數是每個資料單元不包括8個位元組tag的資料位元組個數。

接下來的就是儲存的資料。資料需要64bit對齊,不夠時要補齊到64bit。資料型別是mimatrix時,資料單元tag中位元組數包括矩陣中每個padding的資料個數。其他資料型別時,位元組數不包括padding的個數。

當儲存的資料不超過4個位元組時,還可以採用壓縮的資料單元格式。用4個位元組儲存tag,另外4個位元組儲存資料。在程式設計時,tag的前兩個位元組不為零時,則說明採用的是壓縮的資料單元格式。在把資料寫入mat檔案中時,壓縮的資料單元格式是優先選擇的。

datatype值為14的資料型別是:array data,包括了各種型別的array,如數值矩陣,字元矩陣,稀疏矩陣。是一種復合型別結構。位元組數包括所有subelement位元組數之和。每個subelement都有自己的tag。主要有array flags, dimensions array subelement, array name subelement, real part(pr)subelement, image part subelement。下面將逐一進行介紹:

(未完待續)

DOS檔案格式 與 UNIX檔案格式 轉換

這裡闡述兩種方法 1.使用vim的方法 在vim下 使用如下命令 set fileformat unix 就可轉換成 unix 檔案格式,也可使用其縮寫形式命令 set ff unix 直接輸入命令 set fileformat 或 set ff 還可查詢當前的命令格式。2.使用linux命令工具 ...

Oracle 控制檔案格式ctl檔案格式

options skip 1,errors 10 load data characterset zhs16gbk infile into table table name truncate fields terminated by optionally enclosed by trailing nu...

SWF與FLV檔案格式

最近,因產品需要,開始研究flv與swf的檔案格式,順便編寫了flv與swf檔案的解析工具。1.flv file format flv檔案格式比較簡單,就是乙個flv header加上乙個flv tag序列構成的flv body。flv tag可以是video,audio和script.但是,當前的...