Matlab R2016a从入门到精通 (CAX工程应用丛书)
上QQ阅读APP看书,第一时间看更新

3.2 读写二进制文件

MATLAB中的二进制文件通常包括*.bin、*.dat等文件。在MATLAB中,二进制文件相对于文本文件或XML文件,更加容易进行操作,使用起来也更加方便。MATLAB提供fwrite函数用于写二进制文件,fread函数用于读二进制文件。

3.2.1 写二进制文件

写二进制文件的操作函数主要包括fwrite函数。该函数的作用是将一个矩阵的元素按所定的二进制格式写入已经打开的文件中,并返回成功写入的数据个数。调用格式为:

    count=fwrite(fid, a, precision)

其中,fid是从fopen得到的文件标识,a是待写入的矩阵,precision设定了结果的精度,可用的精度类型见fread中的叙述。

例3-4,写二进制文件示例。

在命令行窗口中输入:

    fid=fopen('example.bin', 'w');
    count=fwrite(fid, magic(5), 'int32');
    status=fclose(fid)

输出结果如下:

    count =    25     %代表输入数据的个数为25
    status =     0    %代表文件已正常关闭

此时,example.bin中存储了5×5个32位整型数据,即5阶方阵的数据,每个数据占用4个字节的存储单位,数据类型为整型,输出变量count值为25。由于是二进制文件,所以无法用type命令来显示文件内容,如果要查看,可用以下命令进行查看:

    fid=fopen('example.bin', 'r')
    data= reshape(fread(fid, count, 'int32'),5,5)
    fclose(fid);

中间一条命令涉及的fread函数将在下小节讲述。

命令行窗口中的输出结果如下所示:

    fid =     5
    data =   17     24      1      8     15
             23      5      7     14     16
              4      6     13     20     22
             10     12     19     21      3
             11     18     25      2      9

3.2.2 读二进制文件

fread函数可用于读二进制文件,该函数的作用是将二进制文件中的数据读入内存中。其最基本的调用形式为:

    data=fread(fid)

其中,fid是从fopen中得来的文件标识,MATLAB读取整个文件并将文件指针放在文件末尾处(在下文的feof命令介绍中有详细解释)。

例如,文件e1.m内容如下:

    a=[5,20,35,14,36];
    b=[0.88,15.24,1555.00,1506.20,2556.68];
    figure(1)
    plot(a, b)

例3-5,读二进制文件e1.m。

在命令行窗口中输入:

    fid=fopen('e1.m', 'r')          %打开文件
    data=fread(fid);           %读文件
    disp(char(data'))          %显示内容

输出结果如下:

    fid =   5                     %可能会不同
    a=[5,20,35,14,36];
    b=[0.88,15.24,1555.00,1506.20,2556.68];
    figure(1)
    plot(a, b)

注意

data’代表data数组的转置,这里是为了方便阅读。

此外,使用char将data转换为ASCII字符的方法如下所示。

在命令行窗口中输入:

    fid=fopen('e1.m', 'r')     %打开文件
    data=fread(fid);      %读文件
    disp((data'))          %显示内容

输出结果如下:

    fid =     6
        97     61     91     53     44     50     48     44     51     53     44     49     52
        44     51     54     93     59     13     10     98     61     91     48     46     56
        56     44     49     53     46     50     52     44     49     53     53     53     46
        48     48     44     49     53     48     54     46     50     48     44     50     53
        53     54     46     54     56     93     59     13     10    102    105    103    117
       114    101     40     49     41     13     10    112    108    111    116     40     97
       44     98     41     13     10

可以设置函数fread的参数来控制返回矩阵的大小和形式,具体通过fread的第2个输入变量来实现,格式如下:

    a=fread(fid, size)

有效的size输入包括3种。

● n:读取前n个整数,并写入一个列向量中;

● inf:读至文件末尾,并写入一个列向量中;

● [m, n]:读取数据到m×n的矩阵中,按列排序,n可以是inf, m不可以。

例3-6,控制返回矩阵的大小和形式。

在命令行窗口中输入:

    fid=fopen('e1.m ', 'r');       %打开文件
    data1=(fread(fid,3))'     %读文件前3个ASCII字符编码
    data2=fread(fid, [2,5])   %读文件接下来10个ASCII字符编码,并排成矩阵

命令行窗口中的输出结果如下:

    data1 =    97     61     91
    data2 =    53     50     44     53     49
          44     48     51     44     52

提示

后一个fread读取的数据是紧接第一个fread读取的数据。

fread命令还有第3个输入变量,用来控制二进制数据转换成MATLAB矩阵时所用的精度,命令格式为:

    a=fread(fid, size, precision)

precision包括两部分:数据类型定义(如int、float等)与一次读取的位数,默认情况下为uchar(8位字符型)。