MATLAB 帮助中心
读取二进制文件中的数据
A = fread(fileID)
A = fread(fileID,sizeA)
A = fread(fileID,precision)
A = fread(fileID,sizeA,precision)
A = fread(___,skip)
A = fread(___,machinefmt)
[A,count] = fread(___)
A = fread(fileID) 将打开的二进制文件中的数据读取到列向量 A 中,并将文件指针定位在文件结尾标记处。该二进制文件由文件标识符 fileID 指示。使用 fopen 可打开文件并获取 fileID 值。读取文件后,请调用 fclose(fileID) 来关闭文件。
A
fileID
fopen
fclose(fileID)
示例
A = fread(fileID,sizeA) 将文件数据读取到维度为 sizeA 的数组 A 中,并将文件指针定位到最后读取的值之后。fread 按列顺序填充 A。
sizeA
fread
A = fread(fileID,precision) 根据 precision 描述的格式和大小解释文件中的值。
precision
A = fread(fileID,sizeA,precision) 将文件数据读取到维度为 sizeA 的数组 A 中,并将文件指针定位到最后读取的值之后。fread 按列顺序填充 A。根据 precision 描述的格式和大小解释文件中的值。
A = fread(___,skip) 在读取文件中的每个值之后将跳过 skip 指定的字节或位数。
skip
A = fread(___,machinefmt) 另外指定在文件中读取字节或位时的顺序。
machinefmt
[A,count] = fread(___) 还将返回 fread 读取到 A 中的字符数。您可将此语法与上述语法中的任何输入参量一起使用。
count
全部折叠
将一个九元素向量写入到示例文件 nine.bin 中。
nine.bin
fileID = fopen('nine.bin','w'); fwrite(fileID,[1:9]); fclose(fileID);
将文件中的所有数据读取到 double 类的向量中。默认情况下,fread 一次读取文件中的 1 个字节,将每个字节解释为一个 8 位无符号整数 (uint8),并返回一个 double 数组。
double
uint8
fileID = fopen('nine.bin'); A = fread(fileID)
A = 9×1 1 2 3 4 5 6 7 8 9
fread 返回一个列向量,文件中的每个字节对应一个元素。
查看 A 的相关信息。
whos A
Name Size Bytes Class Attributes A 9x1 72 double
关闭文件。
fclose(fileID);
创建一个名为 doubledata.bin 并且包含九个双精度值的文件。
doubledata.bin
fileID = fopen('doubledata.bin','w'); fwrite(fileID,magic(3),'double'); fclose(fileID);
打开文件 doubledata.bin,并将文件中的数据读取到一个 3×3 数组 A。指定源数据为 double 类。
fileID = fopen('doubledata.bin'); A = fread(fileID,[3 3],'double')
A = 3×3 8 1 6 3 5 7 4 9 2
创建一个名为 nine.bin 并且包含 1 - 9 中的值的文件。以 uint16 值形式写入数据。
uint16
fileID = fopen('nine.bin','w'); fwrite(fileID,[1:9],'uint16'); fclose(fileID);
将前六个值读取到一个 3×2 数组中。指定源数据为 uint16 类。
fileID = fopen('nine.bin'); A = fread(fileID,[3,2],'uint16')
A = 3×2 1 4 2 5 3 6
fread 返回使用文件 nine.bin 中的前六个值逐列填充的一个数组。
返回到文件的开头。
frewind(fileID)
一次读取两个值,并在读取下一个值之前跳过一个值。使用 precision 值 '2*uint16' 指定此格式。因为数据为 uint16 类,所以一个值由 2 个字节表示。因此,将 skip 参量指定为 2。
'2*uint16'
2
precision = '2*uint16'; skip = 2; B = fread(fileID,[2,3],precision,skip)
B = 2×3 1 4 7 2 5 8
fread 返回使用 nine.bin 中的值逐列填充的一个 2×3 数组。
创建一个包含二进制编码十进制 (BCD) 值的文件。
str = ['AB'; 'CD'; 'EF'; 'FA']; fileID = fopen('bcd.bin','w'); fwrite(fileID,hex2dec(str),'ubit8'); fclose(fileID);
一次读取 1 个字节。
fileID = fopen('bcd.bin'); onebyte = fread(fileID,4,'*ubit8');
显示 BCD 值。
disp(dec2hex(onebyte))
AB CD EF FA
使用 frewind 返回到文件的开头。如果在 little-endian 系统上一次读取 4 位数,则结果将以错误顺序显示。
frewind
frewind(fileID) err = fread(fileID,8,'*ubit4'); disp(dec2hex(err))
B A D C F E A F
使用 frewind 返回到文件的开头。与之前一样一次读取数据的 4 位,但指定 big-endian 排序以显示正确的结果。
frewind(fileID) correct = fread(fileID,8,'*ubit4','ieee-be'); disp(dec2hex(correct))
A B C D E F F A
已打开二进制文件的文件标识符,指定为整数。使用 fread 读取文件之前,您必须使用 fopen 打开文件并获取其标识符 fileID。
数据类型: double
Inf
输出数组 A 的维度,指定为 Inf、整数或一个二元素行向量。
n
[m,n]
m
'uint8=>double'
要读取的值的类和大小(以位为单位),以下列形式之一指定为字符向量或字符串标量。(可选)输入可指定输出矩阵 A 的类。
source
'int16'
output
'int8=>char'
*source
bitn
ubitn
'*ubit18'
'ubit18=>uint32'
N*source 或 N*source=>output
N*source
N
N*source=>output
在跳过 skip 参量指定的字节数之前读取 N 值。 例如:'4*int8'
'4*int8'
下表显示了 source 和 output 的可能值。
无符号整数
'uint'
32 (4)
'uint8'
8 (1)
'uint16'
16 (2)
'uint32'
'uint64'
64 (8)
'uchar'
'unsigned char'
'ushort'
'ulong'
'ubitn'
1 ≤ n ≤ 64
1
64
有符号整数
'int'
'int8'
'int32'
'int64'
'integer*1'
'integer*2'
'integer*4'
'integer*8'
'schar'
'signed char'
'short'
'long'
'bitn'
浮点数
'single'
'double'
'float'
'float32'
'float64'
'real*4'
'real*8'
字符
'char*1'
'char'
MATLAB® char 类型不是固定大小,字节数取决于与文件关联的编码方案。使用 fopen 设置编码。
char
对于 source 的大多数值,如果 fread 在读取完整值之前达到文件的末尾,则不会返回最终值的结果。但是,如果 source 是 bitn 或 ubitn,则 fread 将返回最后一个值的部分结果。
注意
要在 MATLAB 中保留 NaN 和 Inf 值,请读取和写入 double 或 single 类的数据。
NaN
single
数据类型: char | string
string
读取每个值之后要跳过的字节数,指定为标量。如果将 precision 指定为 bitn 或 ubitn,请以位为单位指定 skip。
使用 skip 参量从固定长度记录的非连续字段中读取数据。
'n'
'b'
'l'
's'
'a'
读取文件中的字节的顺序,指定为字符向量或字符串标量。将 machinefmt 指定为下表中列出的值之一。对于 bitn 和 ubitn 精度,machinefmt 指定字节中位的读取顺序,而字节的读取顺序仍与系统字节顺序相同。
'n' 或 'native'
'native'
系统字节排序方式(默认)
'b' 或 'ieee-be'
'ieee-be'
Big-endian 排序
'l' 或 'ieee-le'
'ieee-le'
Little-endian 排序
's' 或 'ieee-be.l64'
'ieee-be.l64'
Big-endian 排序,64 位长数据类型
'a' 或 'ieee-le.l64'
'ieee-le.l64'
Little-endian 排序,64 位长数据类型
默认情况下,当前支持的所有平台都使用 little-endian 排序方式对新文件进行排序。现有二进制文件可以使用 big-endian 或 little-endian 排序方式。
文件数据,以列向量形式返回。如果指定 sizeA 参量,则 A 是指定大小的矩阵。A 中的数据为类 double,除非在 precision 参量中指定不同的类。
读取的字符数,以标量值形式返回。
全部展开
用法说明和限制:
输入参量 precision 必须为常量。
precision 指定的 source 和 output 类不能具有以下值:'long'、'ulong'、'unsigned long'、'bitn' 或 'ubitn'。
'unsigned long'
不能使用 machinefmt 输入。
如果 precision 指定的 source 或 output 为 C 类型,例如 int,则该类型的目标和生产大小必须:
int
匹配。
直接映射到 MATLAB 类型。
precision 指定的 source 类型必须直接映射到目标硬件上的 C 类型。
如果 fread 调用读取整个文件,则所有数据都必须能够放入可供代码生成使用的最大数组中。
如果 sizeA 不是常量,或者包含非有限元,则需要动态分配内存。
fread 函数的代码生成器将 source 或 output 的 char 值视为带符号的 8 位整数。只能使用介于 0 和 127 之间的值。
8
0
127
生成的代码不会报告文件读取错误。因此,您必须在自己的 MATLAB 代码中自行编写文件读取错误处理程序。在您的错误处理代码中,可以考虑检查读取的字节数是否与您请求的字节数匹配。例如:
... N = 100; [vals, numRead] = fread(fid, N, '*double'); if numRead ~= N % fewer elements read than expected end ...
backgroundPool
ThreadPool
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
您可以通过在 Internet URL 上执行低级文件读取操作,从主要在线数据源读取数据。
此函数支持基于线程的环境。
fclose | fgetl | fopen | fscanf | fprintf | fwrite | fseek | ftell
fclose
fgetl
fscanf
fprintf
fwrite
fseek
ftell
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
欧洲
亚太
联系您当地的办事处