二进制数据的读取
使用fread函数可从文件中读取二进制数据,它将每个字节看成整数,并将结果以矩阵形式返回。对于读取二进制文件,fread必须制定正确的数据精度。
fread的基本调用方法是:
A=fread(fid)
其中fid是一个整数型变量,是通过调用fopen函数获得的,表示要读取的文件标识符,输出变量A为矩阵,用于保存从文件中读取的数据。
例如文件的内容如下:
test it
fread函数读取该文件,输入如下命令:
>> f=fopen('','r')
>> answer=fread(f)
answer =
116
101
115
116
32
105
116
输出变量的内容是文件数据的ASCII码值,若要验证读入的数据是否正确,通过下面的命令可以验证。
>> disp(char(ans1'))
test it
fread函数的第二个输入参数可以控制返回矩阵的大小,例如:
>> f=fopen('','r')
>> answer=fread(f2)
answer =
  116
  101
也可以把返回矩阵定义为指定的矩阵格式,例如
>> f=fopen('','r')
>> an=fread(f[2 3])
answer =
  116  115    32
  101  116  105
使用fread函数的第三个输入变量,可以控制fread将二进制数据转成MATLAB 矩阵用的精度,包括一次读取的位数(Number of Bits)和这些位数所代表的数据类型。
常用的精确度类型有下列几种,如表2-6所示。
2-6  常见的精确度类型
   
char
带符号的字符(通常是8h16) 
uchar
无符号的字符(通常是8bits)
short
短整数(通常是16bits)
long
长整数(通常是16bits)
fread和fwrite的区别float
单精度浮点数(通常是32bits)
double
双精度浮点数(通常是64bis)
2.4.2  二进制数据的写入
使用fwrite函数可将矩阵按所指定的二进制格式写入文件,并返回成功写入文件的大小。函数的调用方式如下:
count=fwrite(fid,A,precision)
其中,count用来返回写入文件数据的大小,f参数同样是通过fopen函数获得的整数型变量,表示文件标识符,A表示要写入的数据矩阵,第三个参数precision同二进制读取函数的参数一样,表示数据的写入格式。
在下例中fwrite产生一个大小为100字节的二进制文件,它包含了一个5×5阶魔方矩阵,共25个元素,每个元素占用4个字节。
f=fopen('magic5.bin', 'w');
fwrite(f,magic(5), 'int32');
fclose(f)
二进制文件在不同的计算机架构上可能存储方式不同,所以二进制文件存在兼容性问题,而文本文件则不存在这种兼容性问题。不同的存储方式导致在不同架构上保存的二进制文件在另外的平台上无法读取,这主要是因为多字节数据类型在计算机硬件上的存储顺序不同。在MATLAB中,无论计算机上的数据存储顺序是哪一种,都可以读写二进制文件,但要正确地调用fopen函数打开文件。