Matlab中的fread函數


Matlabfread函數用法

   “fread”以二進制形式,從文件讀出數據。

語法1[a,count]=fread(fid,size,precision)

語法2[a,count]=fread(fid,size,precision,skip)

size:    不指定     :到尾返回讀。

          N         : 讀出N個數據,構成列向量。

          inf       : 讀出fid指向的打開的文件的全部數據。

          [M,N]     : 讀出N個數據,構成列向量,填入M*N矩陣

    precision(精度)

precision(精度)規定了以浮點數、整型數、字符讀出時位。matlab precision(精度)的表達式與c語言、fortran語言、是一致的。不規定precision(精度),則字符默認為: ucher、則數值默認為:雙精度

      以下precision(精度)將保證讀出具有一致的體積。

MATLAB           C or Fortran             Descriphon(精度)

'char'               'char*l'                      8 位,字符型

'uchar'             'unsigned char'          8  

'schar'              'signed char'             8 位,字符型

'int8'                'integer*1'                8 位,整型數

'intl6'               'integer*2'                16 位,整型數.

'int32'              'integer*4'                32 位,整型數.

'int64'              'integer*8'                64 位,整型數

'uint8'              'integer*l'                 8  

'uintl6'             'integer*2'                16  

'uint32'            'integer*4'                32  

'uint64'            'integer*8'                64  

'float32'           'real*4'                   浮點數, 32

'float64'           'real*8'                   浮點數, 32

以下precision(精度)將不保證讀出具有一致的體積。

MATLAB           C or Fortran            Descriphon(精度)

'short'              'short'                     16 位,整型數

'int'                  'int'                         32 位,整型數

'long'               'long'                       32 (64) 位,整型數

'uShort'           'Unsigned short'        16  

'uint'               'Unsigned int'            32  

'ulong'            'unsigned long'          32 (64)    

'float'              'float'                      浮點數, 32

'double'           'double'                  浮點數, 64

以下precision(精度)規定讀出指定的體積n

'bitN'          N位,整型數      1<=N<=64

'ubitN'         N位,            1<=N<=64

 

fread 使用注意

值得注意的是,fread是一列一列地填滿A。例如:

假設一個不換行的文件里含有:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

想要輸入matlab時,令其這樣排:

1   2   3   4   5

6   7   8   9   10

11  12  13  14  15

fread應該寫成:A=fread(fid,[5,3]),得到:

1  6   11

2  7   12

3  8   13

4  9   14

5  10  15

然后再轉置,就能得到正確結果了。

如果錯誤地寫成A=fread(fid,[3,5]),則得到

1 4 7 10 13

2 5 8 11 14

3 6 9 12 15

顯然即使轉置也得不到正確結果。

另外,對於指定了precision的指令,如:A=fread(fid,[5,3],'short=>double'),

程序就會在文件中,以兩個字節為單位提取原文件后變為8字節來填滿A(因為short2字節,double8個字節)。

precision的缺省格式(即不顯示時)為:‘uchar=>double’,所以程序默認是以字節為單位提取原文件數據后變為8字節來填滿A的。

A是一個字符串

那么直接fread讀取A

>>fread(A)

那么讀取到的是A中每個字母的ASCii碼值!

 

再如B是一個字符串

那么fread(B) 將會是把每個字母單獨做一行輸出,而fread(B)'  轉置則會把字母作為一列輸出一直遇到回車鍵才換行!

 

實際案例:

B ='Who is this? \n is me!'

>>fread(B'unit8=>char')

輸出

W

h

o

[]%空格

i

s

[]

t

h

i

s

?

\

n

[]

i

s

[]

m

e

!

如果是:

>>fread(B,'unit8=>char')'

Who is this ? %遇到回車符換行

is me!

 

看到了吧,就是轉置時 遇到了回車符那它就自動換行了,如果是沒有轉置, 則是一個字符一個字符讀取那么分開讀取\ n 則沒有轉義功能了,再說單字母成列也不需要“回車”了。

 

 

此外可參考博文:http://blog.csdn.net/fall221/article/details/7299712


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM