编辑本段回目录
从二进制文件中读取数据
版本支持编辑本段回目录
7.8.0.347 (R2009a)Matlab中文论坛
语法编辑本段回目录
A = fread(fileID)
A = fread(fileID, sizeA)
A = fread(fileID, sizeA, precision)
A = fread(fileID, sizeA, precision, skip)
A = fread(fileID, sizeA, precision, skip,machineformat)
[A, count] = fread(...)
描述编辑本段回目录
A = fread(fileID)
读取一个列向量为A 和 在 最终的文件标记文件指针 的二进制文件数据。
A = fread(fileID, sizeA)《Simulink与信号处理》
读取 文件指针到最后一个元素之后的元素sizeA阅读。 sizeA可以是整数,也可以有表格[m,n]。
A = fread(fileID, sizeA, precision)
根据形式和尺寸精度描述在文件中解释值。该sizeA参数是可选的。
A = fread(fileID, sizeA, precision,skip)www.iLoveMatlab.cn
跳过skip后阅读每个值字节。如果精度bitn或ubitn,指定跳过位。该sizeA参数是可选的。
A = fread(fileID, sizeA, precision, skip, machineformat)
用指定的machineformat读取数据。该sizeA并skip参数可选。
[A, count] = fread(...)
返回:fread读取A中的元素数
输入参数编辑本段回目录
fileID一个整数,FOPEN得到的文件标识符。
sizeAA在输出数组指定维度下列形式之一:
inf | 列向量与在该文件的一些内容。 (默认) |
n | 列向量的n个元素。如果该文件已超过n个元素,fread垫零 |
[m,n] | M——N矩阵,填补列顺序。如果该文件少 fread用零垫 比M——N个元素 。n可以是inf,但M却不能。 |
字符串指定的形式和值的大小阅读。包括可选的输出矩阵A
使用下列形式之一:
'source' | 指定类的输入值。输出矩阵A是类一倍。 例如:'int16' |
'source=>output' | 输入和输出指定的类。 例如:'int8 =>“字符' |
'*source' | 作为输入输出具有相同的类。 例如:'* uint8' 对于'bitn'或'ubitn'精度,输出具有最小的类,可以包含的输入。 例如:'* ubit18'等价于'ubit18=>“uint32' |
'N*source' OR 'N*source=>output' | 如果你指定一个有效跳过参数。在每次读N值跳过。 例如:'4 * int8' |
下表列出了可能的来源和输出值。
《Simulink与信号处理》
数值类型 | 精确 | 比特(字节) |
Integers, unsigned | uint | 32 (4) |
uint8 | 8 (1) | |
uint16 | 16 (2) | |
uint32 | 32 (4) | |
uint64 | 64 (8) | |
uchar | 8 (1) | |
unsigned char | 8 (1) | |
ushort | 16 (2) | |
ulong | 系统相关 | |
ubitn | 1 ≤ n ≤ 64 | |
Integers, signed | int | 32 (4) |
int8 | 8 (1) | |
int16 | 16 (2) | |
int32 | 32 (4) | |
int64 | 64 (8) | |
integer*1 | 8 (1) | |
integer*2 | 16 (2) | |
integer*3 | 32 (4) | |
integer*4 | 64 (8) | |
schar | 8 (1) | |
signed char | 8 (1) | |
short | 16 (2) | |
long | 系统相关 | |
bitn | 1 ≤ n ≤ 64 | |
浮点数 | single | 32 (4) |
double | 64 (8) | |
float | 32 (4) | |
float32 | 32 (4) | |
float64 | 64 (8) | |
real*4 | 32 (4) | |
real*8《Simulink与信号处理》 | 64 (8) | |
Characters | char*1 | 8 (1) |
char | 依赖于与该文件相关联的编码方案。集编码与fopen |
long and ulong 对32位系统是32位,在64位系统是64位。
对于大多数 精度,如果fread 到达文件结尾之前 读一个完整的元素,fread不返回的最后一个元素的值。但是,如果源是bitn或ubitn,然后fread 返回一个元素的最后部分结果。
默认:'uint8=>double'skip
要跳过的字节数后 阅读每个值。如果你指定一个bitn或ubitn精度,指定跳过位。使用此参数来读取固定长度的记录 不连续的字段中的数据。
默认值:0Matlab中文论坛
字符串,指定在文件中读取字节的顺序。对于bitn和ubitn精度,指定阅读范围内的一个字节位顺序。指定machineformat读取和写入到不同的系统上,或在一个特定的顺序读取一个字节的部分文件。
可能的值是:
'n' or 'native' | 字节排序,您的系统使用(默认) |
'b' or 'ieee-be' | 大端字节序排序 |
'l' or 'ieee-le' | 小端序 |
's' or 'ieee-be.l64' | big -endian的顺序,64位数据类型 |
'a' or 'ieee-le.l64' | 小端序,64位数据类型 |
输出参数编辑本段回目录
AA列向量,除非你指定的表格[M,N]。在A级的数据是,除非你双精度参数中指定一个不同的类。
book.iLoveMatlab.cn
fread 读取成功的元素的数量。
应用举例编辑本段回目录
阅读文件的内容:
% Create the file
fid = fopen('magic5.bin', 'w');
fwrite(fid, magic(5));
fclose(fid);
% Read the contents back into an array
fid = fopen('[]magic5.bin');
m5 = fread(fid, [5, 5], '*uint8');
fclose(fid);
模拟与fread类型的功能,以显示文本文件的内容:
fid = fopen('fread.m');
% read the entire file as characters
% transpose so that F is a row vector
F = fread(fid, '*char')'
fclose(fid);
如果你不指定的精度,fread适用于默认uint8=>double:
fid = fopen('fread.m');
F_nums = fread(fid, 6)' % read the first 6 bytes('%FREAD')
fclose(fid);
此代码返回
F_nums =
37 70 82 69 65 68
从文件中读取选定的行或列:
% Create a file with values from 1 to 9
fid = fopen('nine.bin', 'w');
alldata = reshape([1:9],3,3);
fwrite(fid, alldata);
fclose(fid);
% Read the first six values into twocolumns
fid = fopen('nine.bin');
two_cols = fread(fid, [3, 2]);
% Return to the beginning of the file
frewind(fid);
% Read two values at a time, skip one
% Returns six values into two rows
% (first two rows of 'alldata')
two_rows = fread(fid, [2, 3], '2*uint8',1);《Simulink与信号处理》
% Close the file
fclose(fid);
指定machineformat读取二进制编码的十进制(BCD)正确的单独数字值:
% Create a file with BCD values
str = ['AB'; 'CD'; 'EF'; 'FA'];
fid = fopen('bcd.bin', 'w');
fwrite(fid, hex2dec(str), 'ubit8');
fclose(fid);
% If you read one byte at a time,
% no need to specify machine format
fid = fopen('bcd.bin');
onebyte = fread(fid, 4, '*ubit8');
disp('Correct data, read with ubit8:')
disp(dec2hex(onebyte))
% However, if you read 4 bits on alittle-endian
% system, your results appear in the wrongorder
frewind(fid); % return to beginning of file
part_err = fread(fid, 8, '*ubit4');
disp('Incorrect data on little-endian systems,ubit4:')
disp(dec2hex(part_err))
% Specify a big-endian format for correctresults
frewind(fid);
part_corr = fread(fid, 8, '*ubit4','ieee-be');
disp('Correct result, ubit4:')
disp(dec2hex(part_corr))
fclose(fid);