首页 > 编程笔记 > MATLAB笔记 阅读:3

MATLAB fread()和fwrite()读写二进制文件(附带实例)

磁盘用固定的字节数保存包括整数在内的二进制数据。例如,以二进制格式存储 0~40 亿的任何一个数,如 1、1000 或 1000000,每个数字占用 4 个字节的空间。

二进制文件可用来保存数值数据并访问文件中的指定数字,或随机访问文件中的数字。与人可识别的文本文件不同,二进制文件只能通过机器读取。二进制文件是存储数据最为紧凑和快速的格式。在二进制文件中可使用多种数据类型,但这种情况并不常见。

二进制文件占用较少的磁盘空间,且存储和读取数据时无须在文本表示与数据之间进行转换,因此二进制文件效率更高。二进制文件可在 1 字节磁盘空间上表示 256 个值。除扩展精度和复数外,二进制文件中含有数据在内存中存储格式的映像。因为二进制文件的存储格式与数据在内存中的格式一致,无须转换,所以读取文件的速度更快。

文本文件和二进制文件均为字节流文件,以字符或字节的序列对数据进行存储。

文件 I/O 函数可在二进制文件中进行读取、写入操作。如需在文件中读写数字数据,或创建在多个操作系统上使用的文本文件,可考虑用二进制文件函数。

MATLAB读二进制文件

在 MATLAB 中,使用 fread() 函数读取二进制文件中的数据。

fread() 函数的调用格式及说明如下表所示:

表:fread() 函数调用格式及说明
调用格式 说明
A = fread(fileID) 将打开的二进制文件中的数据读取到列向量 A 中,并将文件指针定位在文件结尾标记处
A = fread(fileID,sizeA) 将文件数据读取到维度为 sizeA 的数组 A 中,并将文件指针定位到最后读取的值之后
A = fread(fileID,sizeA,precision) 根据 precision 描述的格式和大小解释文件中的值
A = fread(fileID,sizeA,precision,skip) 在读取文件中的每个值之后将跳过 skip 指定的字节或位数
A = fread(fileID,sizeA,precision,skip,machinefmt) 另外指定在文件中读取字节或位时的顺序
[A,count] = fread(...) 返回 fread 读取到 A 中的字符数

MATLAB写二进制文件

在 MATLAB 中,使用 fwrite() 函数将数据写入二进制文件。

fwrite() 函数的调用格式及说明如下表所示:

调用格式 说明
fwrite(fileID,A) 将数组 A 的元素按列顺序以 8 位无符号整数的形式写入一个二进制文件
fwrite(fileID,A,precision) 按照 precision 说明的形式和大小写入 A 中的值
fwrite(fileID,A,precision,skip) 在写入每个值之前跳过 skip 指定的字节数或位数
fwrite(fileID,A,precision,skip,machinefmt) 指定将字节或位写入文件的顺序
count = fwrite(A) 返回 A 中 fwrite 已成功写入文件的元素数

【实例 1】创建全 1 矩阵文件。在 MATLAB 命令行窗口中输入如下命令:
>> close all                               % 关闭当前已打开的文件
>> clear                                   % 清除工作区的变量
>> fileID = fopen('doubledata.bin','w');   % 创建一个名为 doubledata.bin的文件
>> fwrite(fileID,ones(3),'double');        % 添加3阶全1矩阵数据
>> fclose('all');                          % 关闭文件
>> fileID = fopen('doubledata.bin');       % 打开文件
>> A = fread(fileID,[3 3],'double')        % 将文件中的数据读取到 3×3 数组 A
A =
    1     1     1
    1     1     1
    1     1     1
>> fclose('all');                          % 关闭文件

【实例 2】写入二进制文件。在 MATLAB 命令行窗口中输入如下命令:
>> close all                            % 关闭当前已打开的文件
>> clear                                % 清除工作区的变量
>> fileID = fopen('uint8.bin','w');     % 创建并打开名称为uint8.bin 的文件
>> fwrite(fileID,[1:9]);                % 将从1~9的整数以8位无符号整数的形式写入
>> fwrite(fileID,magic(5),'integer*4');                       % 在文件中添加5阶魔方矩阵数据
>> fprintf(fileID,'%6s\r\n','%将 uint8 数据写入二进制文件');  % 将数据写入文本文件
>> fclose(fileID);                                            % 关闭文件

相关文章