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) |