(translator=pacific, ChineseSource=pacific-20020502-12.5\fread.html, EnglishSource=c:\matlabr12\help\techdoc\ref\fread.html)
MATLAB Function Reference    
fread

從檔案中讀取二元資料(binary data)

Syntax

Description

[A,count] = fread(fid,size,precision) 從指定的檔案中讀取二元資料(binary data)並將之寫入矩陣A. 選擇性輸出引數(optional output argument)count為讀入矩陣的數量. fid是從fopen指令中所得到的 file identifier。

size 是個選擇性引數(optional argument),用來設定要讀多少資料。若size未被設定,fread會一直讀到檔案的結尾,而指標也會指在檔案的結尾(詳細情形請參考feof). size的使用格式如下:

n
n個元素讀進行向量(column vector)中。
inf
讀到檔案的結尾,並產生和檔案中的元素一樣多的行向量(column vector)
[m,n]
以行為主(column order)的方式,來讀取可填滿m-by-n矩陣的元素,如果無法填滿m-by-n的矩陣,剩下的以0來代替n可以設為inf,但m不行。

precision是拿來指定讀取資料的格式。通常為整數(int)或浮點數(float),並接著要存成幾個bit的格式。在下列圖表中,不論是在MATLAB還是在C或Fortran的環境下,都可能會使用。Precision的預設值為'uchar'

MATLAB
C or Fortran
說明
'schar'
'signed char'
8 bits的有正負號字元(signed character)
'uchar'
'unsigned char'
8 bits的無正負號字元(unsigned character)
'int8'
'integer*1'
8 bits的整數
'int16'
'integer*2'
16 bits的整數
'int32'
'integer*4'
32 bits的整數
'int64'
'integer*8'
64 bits的整數
'uint8'
'integer*1'
8 bits的無正負號整數(Unsigned integer)
'uint16'
'integer*2'
16 bits的無正負號整數(Unsigned integer)
'uint32'
'integer*4'
32 bits的無正負號整數(Unsigned integer)
'uint64'
'integer*8'
64 bits的無正負號整數(Unsigned integer)
'float32'
'real*4'
32 bits的浮點數
'float64'
'real*8'
64 bits的浮點數
'double'
'real*8'
64 bits的浮點數
.

MATLAB支援下列依作業系統平台而不同的格式,但不保證在所有作業系統下都有一定的大小

MATLAB
C or Fortran
Interpretation
'char'
'char*1'
8 bits的字元
'short'
'short'
16 bits的整數
'int'
'int'
32 bits的整數
'long'
'long'
32 或 64 bits的整數
'ushort'
'unsigned short'
16 bits的無正負號整數(unsigned integer)
'uint'
'unsigned int'
32 bits的無正負號整數(unsigned integer)
'ulong'
'unsigned long'
32 or 64 bits的無正負號整數(unsigned integer)
'float'
'float'
32 bits的浮點數

下表中的單位是以bits表示,而非bytes

MATLAB
C or Fortran
Interpretation
'bitN'
-
N bits的有正負號整數 (signed integer)(1 N 64)
'ubitN'
-
N bits的無正負號整數(unsigned integer) (1 N 64)

所有數字都預設回傳到'double'形態陣列的類別(class 'double' array)中。若不想回傳給double,要將precision引數設定成來源格式(source format),再加是"=>"字元,後面再接上目的格式(destination format)。其實不必明確的指定目的格式的類別名稱(詳情請參考class),因為MATLAB會自動轉為最適當的類別。若來源格式和目的格式是相同的,可將指令簡化為:

意思就是:

下面的圖表為precision的幾個格式範例.

'uint8=>uint8'
以8-bit的無正負號整數(unsigned integer)格式輸入,並存到8-bit的無正負號整數(unsigned integer)的陣列中。
'*uint8'
上面方式的簡寫
'bit4=>int8'
以4-bit有正負號整數的格式輸入並存到8-bits有正負號整數的陣列中。每個4-bit整數都變成8-bit的整數。
'double=>real*4'
用雙倍浮點數的格式讀入,轉存到32-bit的浮點數陣列中

[A,count] = fread(fid,size,precision,skip) 包括選擇性引數(optional arguments)skip ,用來決定每次讀進一個precision的資料之後,要跳過多少個bytes。當skip引數被設定時,precision中可能包括重覆要素(repetition factor) 'N*' 來指定來源格式(source foramt)。例如'40*uchar'

當skip被指定時,fread讀取最多repetition factor個值(預設為1),接著跳過skip所指定的長度,再讀取另一組值,再跳過,如此循環。直到size所設定的數目被讀過為止。若precision是以像'bitN''ubitN'之類以bit的格式來表示時,skip也會以bit為單位來執行。所以我們可以利用設定repetition factor和skip來讀取非連續但有固定格式的資料。

若已讀到檔案的結尾而還未填滿precision所指定的矩陣元素,fread會將剩下的元素填入0 bits, 直到此數被填滿為止。若讀取時發生錯誤,則只會讀到最後一個已經完整讀取的數。

Examples

For example,

可顯示出fread.m檔案中的help說明。要利用fread來做到同一件事,可以利用下列指令:

在本例中, size是使用預設的inf,precision使用預設的'uchar'. fread讀取檔案並將unsigned character轉換成'double'(雙倍浮點數)。為了要把結果轉成可讀的檔案,利用char指令將'double'轉成'char',並把行向量(column vector)轉成列向量(row vector)。

As another example,

以40個字元為一個區塊(block),讀取120個字元,每一個區塊都以8個字元作間隔。要注意的是s會是'uint8'的格式,因為這是最適合目的格式(destination format)'uchar'的格式了。而120可以被40整除,所以最後一個區塊可以完全的讀取到,這也意味著在fread結束時,最後一次跳過(skip)的動作也會被執行。反之,若最後一個區塊未被完全的讀取,跳過(skip)將不會是fread指令的最後一個動作。

See fopen for informationabout reading Big and Little Endian files.

See Also

fclose, ferror, fopen, fprintf, fread, fscanf, fseek, ftell, fwrite


 frameedit fread (serial)