| MATLAB Function Reference |
|
Syntax
[A,count] = fread(fid,size,precision) [A,count] = fread(fid,size,precision,skip)
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個元素讀進行向量(column vector)中。 |
|
讀到檔案的結尾,並產生和檔案中的元素一樣多的行向量(column vector) |
|
以行為主(column order)的方式,來讀取可填滿m-by-n矩陣的元素,如果無法填滿m-by-n的矩陣,剩下的以0來代替n可以設為inf,但m不行。 |
precision是拿來指定讀取資料的格式。通常為整數(int)或浮點數(float),並接著要存成幾個bit的格式。在下列圖表中,不論是在MATLAB還是在C或Fortran的環境下,都可能會使用。Precision的預設值為'uchar'。
MATLAB支援下列依作業系統平台而不同的格式,但不保證在所有作業系統下都有一定的大小
| MATLAB |
C or Fortran |
Interpretation |
|
- |
N bits的有正負號整數 (signed integer)(1
N
64) |
|
- |
N bits的無正負號整數(unsigned integer) (1
N
64) |
所有數字都預設回傳到'double'形態陣列的類別(class 'double' array)中。若不想回傳給double,要將precision引數設定成來源格式(source format),再加是"=>"字元,後面再接上目的格式(destination format)。其實不必明確的指定目的格式的類別名稱(詳情請參考class),因為MATLAB會自動轉為最適當的類別。若來源格式和目的格式是相同的,可將指令簡化為:
*source
source=>source
[A,count] = fread(fid,size, 包括選擇性引數(optional arguments)precision,skip)
skip ,用來決定每次讀進一個precision的資料之後,要跳過多少個bytes。當skip引數被設定時,precision中可能包括重覆要素(repetition
factor) 'N*' 來指定來源格式(source foramt)。例如'40*uchar'。
注意
不要將用在repetition factor 的星號(*)和用來表示precision的星號弄混。'40*uchar'是'40*uchar=>double'的意思,而不是'40*uchar=>uchar'.
|
當skip被指定時,fread讀取最多repetition factor個值(預設為1),接著跳過skip所指定的長度,再讀取另一組值,再跳過,如此循環。直到size所設定的數目被讀過為止。若precision是以像'bitN'或'ubitN'之類以bit的格式來表示時,skip也會以bit為單位來執行。所以我們可以利用設定repetition factor和skip來讀取非連續但有固定格式的資料。
若已讀到檔案的結尾而還未填滿precision所指定的矩陣元素,fread會將剩下的元素填入0 bits, 直到此數被填滿為止。若讀取時發生錯誤,則只會讀到最後一個已經完整讀取的數。
Examples
type fread.m
可顯示出fread.m檔案中的help說明。要利用fread來做到同一件事,可以利用下列指令:
fid = fopen('fread.m','r');
F = fread(fid);
s = char(F')
在本例中, size是使用預設的inf,precision使用預設的'uchar'. fread讀取檔案並將unsigned character轉換成'double'(雙倍浮點數)。為了要把結果轉成可讀的檔案,利用char指令將'double'轉成'char',並把行向量(column vector)轉成列向量(row vector)。
s = fread(fid,120,'40*uchar=>uchar',8);
以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) |
|