Matlab中fread函数用法
“fread”以二进制形式,从文件读出数据。
语法1:[a,count]=fread(fid,size,precision)
语法2:[a,count]=fread(fid,size,precision,skip)
size: 不指定 :到尾返回读。
N : 读出N个数据,构成列向量。
inf : 读出fid指向的打开的文件的全部数据。
[M,N] : 读出N个数据,构成列向量,填入M*N矩阵
precision(精度)
precision(精度)规定了以浮点数、整型数、字符读出时位。matlab 的precision(精度)的表达式与c语言、fortran语言、是一致的。不规定precision(精度),则字符默认为: ucher、则数值默认为:双精度 。
以下precision(精度)将保证读出具有一致的体积。
MATLAB C or Fortran Descriphon(精度)
\'char\' \'char*l\' 8 位,字符型
\'uchar\' \'unsigned char\' 8 位
\'schar\' \'signed char\' 8 位,字符型
\'int8\' \'integer*1\' 8 位,整型数
\'intl6\' \'integer*2\' 16 位,整型数.
\'int32\' \'integer*4\' 32 位,整型数.
\'int64\' \'integer*8\' 64 位,整型数
\'uint8\' \'integer*l\' 8 位
\'uintl6\' \'integer*2\' 16 位
\'uint32\' \'integer*4\' 32 位
\'uint64\' \'integer*8\' 64 位
\'float32\' \'real*4\' 浮点数, 32 位
\'float64\' \'real*8\' 浮点数, 32 位
以下precision(精度)将不保证读出具有一致的体积。
MATLAB C or Fortran Descriphon(精度)
\'short\' \'short\' 16 位,整型数
\'int\' \'int\' 32 位,整型数
\'long\' \'long\' 32 (64) 位,整型数
\'uShort\' \'Unsigned short\' 16 位
\'uint\' \'Unsigned int\' 32 位
\'ulong\' \'unsigned long\' 32 (64) 位
\'float\' \'float\' 浮点数, 32 位
\'double\' \'double\' 浮点数, 64 位
以下precision(精度)规定读出指定的体积n。
\'bitN\' N位,整型数 1<=N<=64
\'ubitN\' N位, 1<=N<=64
fread 使用注意
值得注意的是,fread是一列一列地填满A的。例如:
假设一个不换行的文件里含有:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ,
想要输入matlab时,令其这样排:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
则fread应该写成:A=fread(fid,[5,3]),得到:
1 6 11
2 7 12
3 8 13
4 9 14
5 10 15
然后再转置,就能得到正确结果了。
如果错误地写成A=fread(fid,[3,5]),则得到
1 4 7 10 13
2 5 8 11 14
3 6 9 12 15
显然即使转置也得不到正确结果。
另外,对于指定了precision的指令,如:A=fread(fid,[5,3],\'short=>double\'),
程序就会在文件中,以两个字节为单位提取原文件后变为8字节来填满A(因为short是2字节,double是8个字节)。
precision的缺省格式(即不显示时)为:‘uchar=>double’,所以程序默认是以字节为单位提取原文件数据后变为8字节来填满A的。
如A是一个字符串
那么直接fread读取A
>>fread(A)
那么读取到的是A中每个字母的ASCii码值!
再如B是一个字符串
那么fread(B) 将会是把每个字母单独做一行输出,而fread(B)\' 转置则会把字母作为一列输出一直遇到回车键才换行!
实际案例:
B =\'Who is this? \n is me!\'
>>fread(B,\'unit8=>char\')
输出
W
h
o
[]%空格
i
s
[]
t
h
i
s
?
\
n
[]
i
s
[]
m
e
!
如果是:
>>fread(B,\'unit8=>char\')\'
Who is this ? %遇到回车符换行
is me!
看到了吧,就是转置时 遇到了回车符那它就自动换行了,如果是没有转置, 则是一个字符一个字符读取那么分开读取\ 和n 则没有转义功能了,再说单字母成列也不需要“回车”了。
此外可参考博文:http://blog.csdn.net/fall221/article/details/7299712
请发表评论