MATLAB fread()和fwrite():读写二进制文件(附带实例)
与文本文件或 XML 文件相比,二进制文件容易与 MATLAB 进行交互。
fwrite() 函数的格式如下:
【实例 1】写二进制文件示例。在命令行窗口中输入如下代码,并保存为 M 文件。
由于是二进制文件,所以无法用 type 命令来显示文件内容。如果要查看其内容,则可在命令行窗口中输入以下代码,并显示相应的输出结果。
【实例 2】实现读取二进制文件内容,并写入一个 6×6 的矩阵中。在命令行窗口中输入如下代码,并保存为 M 文件。
【实例 3】将矩阵写入文件 a.txt 中。在命令行窗口中输入如下代码,并保存为 M 文件:
fread() 函数的调用格式如下:
【实例 4】例如,文件 t.m 的内容如下:
【实例 5】使用 fread() 函数读二进制文件 t.m 并输出。在命令行窗口中输入如下代码,并保存为 M 文件。
函数 fread() 返回的矩阵的大小和形式是可控的,通过 fread() 函数的第二个输入变量来实现:
【实例 6】对 t.m 文件进行操作。在命令行窗口中输入如下代码,并保存为 M 文件。
函数 fread() 根据 precision 描述的格式和大小解释文件中的值:
MATLAB fwrite()写二进制文件
对 MATLAB 而言,二进制文件相对容易被写出来。fwrite() 函数的作用是将一个矩阵的元素按指定的二进制格式写入某个打开的文件中,并返回成功写入的数据个数。fwrite() 函数的格式如下:
count=fwrite(fID,a,precision)其中,fID 是从 fopen() 中得到的文件标识;a 是待写入的矩阵;precision 设定了结果的精度,可用的精度类型见 fread() 中的叙述。
【实例 1】写二进制文件示例。在命令行窗口中输入如下代码,并保存为 M 文件。
fID=fopen('tob.bin','w'); count=fwrite(fID,magic(6),'int32'); status=fclose(fID)上述代码的执行结果是生成一个文件名为 tob.bin 的二进制文件,长度为 144B,包含 6×6 个数据,即 6 阶方阵的数据,每个数据占用 4B 的存储单位,数据类型为整型,输出变量 count 的值为 36。
由于是二进制文件,所以无法用 type 命令来显示文件内容。如果要查看其内容,则可在命令行窗口中输入以下代码,并显示相应的输出结果。
>> fID=fopen('tob.bin','r') >> data=fread(fID,36,'int32') fID = 4 data = 35 3 31 8 ...
【实例 2】实现读取二进制文件内容,并写入一个 6×6 的矩阵中。在命令行窗口中输入如下代码,并保存为 M 文件。
fID=fopen('tob.bin','w'); count=fwrite(fID,magic(6),'int32'); fID=fopen('tob.bin','r'); data=fread(fID,[6,6],'int32')运行后,输出结果如下:
data = 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11
【实例 3】将矩阵写入文件 a.txt 中。在命令行窗口中输入如下代码,并保存为 M 文件:
A=[1 3;4 5]; fID=fopen('a.txt','w') count=fwrite(fID,A,'int32') closestatus=fclose(fID) fID=fopen('a.txt','r'); %再次打开文件 data=fread(fID,[2,2],'int32')运行后,输出结果如下:
fID = 21 count = 4 closestatus = 0 data = 1 3 4 5
MATLAB fread()读二进制文件
在 MATLAB 中,利用 fread() 函数可以从文件中读取二进制数据,读入时将每个字节看作一个整数,将结果写入一个矩阵中并返回。fread() 函数的调用格式如下:
a=fread(fID)其中,fID 是从 fopen 中得来的文件标识。MATLAB 读取整个文件并将文件指针放在文件末尾。
【实例 4】例如,文件 t.m 的内容如下:
a=[35,20,25,15,35]; b=[1554.88,1555.24,1555.76,1556.20,1556.68]; figure(1) plot(a,b)读二进制文件 t.m。在命令行窗口中输入如下代码,并保存为 M 文件。
fID=fopen('t.m','r') %打开文件 data=fread(fID); %读文件 disp(char(data')) %显示内容运行后,输出结果如下:
fID = 29 a=[35,20,25,15,35]; b=[1554.88,1555.24,1555.76,1556.20,1556.68]; figure(1) plot(a,b)
【实例 5】使用 fread() 函数读二进制文件 t.m 并输出。在命令行窗口中输入如下代码,并保存为 M 文件。
fID=fopen('t.m','r') %打开文件 data=fread(fID); %读文件 disp((data')) %显示内容运行后,输出结果如下:
fID = 6 列 1 至 24 97 61 91 51 53 44 50 48 44 50 53 44 49 53 44 51 53 93 59 13 10 98 61 91 列 25 至 48 49 53 53 52 46 56 56 44 49 53 53 53 46 50 52 44 49 53 53 53 46 55 54 44 列 49 至 72 49 53 53 54 46 50 48 44 49 53 53 54 46 54 56 93 59 13 10 102 105 103 117 114 列 73 至 89 101 40 49 41 13 10 112 108 111 116 40 97 44 98 41 13 10
函数 fread() 返回的矩阵的大小和形式是可控的,通过 fread() 函数的第二个输入变量来实现:
a=fread(fID,size)size 的有效输入大体可分为以下 3 种:
- n:读取前 n 个整数,并写入一个列向量中;
- inf:读至文件末尾;
- [m, n]:读取数据到 m×n 维的矩阵中,按列排序。n 可以是 inf,但 m 不可以。
【实例 6】对 t.m 文件进行操作。在命令行窗口中输入如下代码,并保存为 M 文件。
clear all fID=fopen('t.m','r'); %打开文件 data=fread(fID,4) %读文件 data=fread(fID,[3,2])运行后,输出结果如下:
fID = 34 data = 97 61 91 51 data = 53 48 44 44 50 50
函数 fread() 根据 precision 描述的格式和大小解释文件中的值:
a=fread(fID,size,precision)precision 包括两部分:
- 一是数据类型定义,如 int、float 等;
- 二是一次读取的位数。数据类型在默认情况下为 uchar(无符号 8 位字符型),常用的精度类型如下表所示。
类型 | 描述 | 类型 | 描述 |
---|---|---|---|
schar | 带符号字符型(8位) | uchar | 无符号字符型 |
int8 | 整型(8位) | uint8 | 无符号整型(8位) |
int16 | 整型(16位) | uint16 | 无符号整型(16位) |
int32 | 整型(32位) | uint32 | 无符号整型(32位) |
int64 | 整型(64位) | uint64 | 无符号整型(64位) |
以下为与平台有关的精度类型 | |||
char | 字符型(8位,有符号或无符号) | ushort | 无符号整型(16位) |
short | 整型(16位) | uint | 无符号整型(32位) |
int | 整型(32位) | ulong | 无符号整型(32位或64位) |
long | 整型(32位或64位) | float | 浮点数(32位) |
single | 浮点数(32位) | double | 浮点数(64位) |
float32 | 浮点数(32位) | float64 | 浮点数(64位) |