千家信息网

如何进行MATLAB fread函数分析

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章将为大家详细讲解有关如何进行MATLAB fread函数分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MATLAB的确用起来很方便,前提是
千家信息网最后更新 2025年01月16日如何进行MATLAB fread函数分析

这篇文章将为大家详细讲解有关如何进行MATLAB fread函数分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

MATLAB的确用起来很方便,前提是你了解它的函数~

MATLAB的帮助文档看的那叫一个似懂非懂啊,特此总结。对我而言, fread的主要调用形式是这样的:

    data = fread(fid, N, 'str')

fid不用说,自然是文件句柄(如fid=fopen('abc.txt' ,'r')),N是读入的元素个数,'str'是格式。在以前不会用的时候,格式都是直接省略的,这个时候函数就一个字节一个字节地从文件中读入数据,再在MATLAB中转化为double形式。

如果文件时二进制文件,这样读当然没问题,如果想要读入的是文本,那就不行了。文本也是一个字节一个字节地读,但是最后应该转化为char型:

>> frewind(f);>> a=fread(f,1,'char=>char')a =B>> frewind(f);>> a=fread(f,1,'uchar=>uchar')a =   66
>> class(a)ans =uint8>> frewind(f);>> a=fread(f,1,'uint8=>char')a =B>> frewind(f);>> a=fread(f,1,'uchar=>char')a =B
>> frewind(f);>> a=fread(f,1,'int8=>char')a =B

上面是一个BMP文件的例子,读入的是文件第第一个字节,BMP文件以"BM"开头,第一个自己自然是B。int8、uint8、char、uchar是几种一个字节的数据类型。在例子中,a=>b表示以a的类型读入,再转化为b类型。a的作用是控制每次读入的字节数,然后转化为相应的类型,形成一定的数值,b的作用是在a的基础上进行转化。这里都是一个字节,读入以后,最后如果是char型,就都变成了字母B,如果是uchar型,就变成uint8。

以上是字节数相同的例子,a=>b,a似乎没多大用,但是,当字节数不同时,就大有用场了:

>> frewind(f);>> a=fread(f,1,'uint16=>uint8')a =  255% 在这里,uint16是两个字节的,所以一次性读入2个字节,先以uint16的形式读入,整数的排列规则是很简单的,假设低字节为a,高字节为b,那就等于b*256+a,得到的数肯定超过256,最后又要转化为uint8,因此只能截断了,uint8一个字节,最大能表示的数就是255,因此返回255.
 
>> frewind(f);>> a=fread(f,1,'uint16=>float')a =       19778
% 这里,说明以uint16读入的数,得到为19778,然后再转为单精度的float型,还是19778,当然,类型已经换掉了>> frewind(f);>> a=fread(f,1,'*uint32')a =    37637442
% *uint32相当于uint32=>uint32,以4个字节的形式读入,成为一个整数。
>> frewind(f);>> a=fread(f,1,'uint32=>float')a =    37637440% 以四个字节的形式读入,先变成整型,再变成float型,末尾的2丢掉了,是精度问题?
>> class(a)ans =single
 
>> frewind(f);>> a=fread(f,1,'uint32=>double')a =    37637442% 转化为double,精度就够了
>> frewind(f);>> a=fread(f,1,'float=>double')a = 1.3981e-037
% 最精彩的来了,尽管float和uint32都是4个字节,但是这里得到的数却不与上面相等。前面说了,a=>b,系统以a的格式,读入相应的字节数,转化为a类型的一个数值,再将a转为b类型,这里读入的时候,以float的规则来读,再将float转为double,无非是提高精度而已。>> frewind(f);>> a=fread(f,1,'float=>uint32')a =           0
% 读到的是1.3981e-037,转化为整数,当然是0了

此外,我还尝试过以下格式:

>> a=fread(f,1,'3*int8=>char')a =B

N*a=>b的形式,一般用在有skip(跳过)的地方,这里没有在后面的参数中指定跳过,所以默认的跳过为零,得到的结果还是字母B。跳过形式往往用在按bit读的时候,

>> a=fread(f,3,'*uint8')a =   66   77   62>> frewind(f);>> a=fread(f,4,'1*int8=>int8',1)a =   66   62
   2
   0% 注意,前面读入的时候按int8读,所以跳过的时候,跳的是1个int8的长度,因此跳过了77,结果为66,,62
>> frewind(f);>> a=fread(f,2,'1*bit8=>int8',8)a =   66   62
% 前面是bit8,凡是bitN的类型的,后面跳过时都指的是跳过几个bit
>> frewind(f);>> a=fread(f,2,'1*bit16=>int8',8)a =  127    2%前面读入是按两个字节读(bit16),因此第一次读进来的是66和77,后来要转为int型,int表示的范围-128~127,因此就变成127了。然后跳过了62,下一个数字是2,在下一个数字是0,因此加在一起就是0了。

另外,最全的调用形式是

[data, n] = fread(fid, N, 'a=>b', nn, 'l/n/b/...')

最后一个参数的作用是指定大端小端,windows这种用intel的是小端,低地址放低字节,所以读进66和77,66在低地址,他是低字节,77是高地址,是高字节,结果为66+77*256,UINX之类的一般是大端。网络通信一般是大端

'b' :大端

'l' :小端

'n' :原来是大端现在就是大端,原来小端现在就是小端!

返回的n是指实际读进了几个单元。把n和N一比较,相等就说明确实读进了所需要的N个数据。

关于如何进行MATLAB fread函数分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

字节 形式 类型 文件 大端 时候 函数 就是 格式 作用 例子 地址 数据 整数 精度 结果 分析 两个 内容 参数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 联想台式机支持服务器内存吗 c语言软件开发平台有哪些 数据库查时间sql转换 域控服务器和文件服务器搭建 数据服务器不能连接 服务器如何创建一个网站 计算机网络技术教学工作计划 软件开发 源代码 版权 广州物联网软件开发多少钱 网络安全设备验收过程 软件开发每年涨多少钱 兰州远腾软件开发 软件开发收入如何确认成本 阜阳电话视频系统服务器 广东绿力网络技术有限公司 知乎 自学网络安全工程师需要学习什么 医院信息网络安全自查报告 华为网络技术面试题及答案 药盟互联网科技有限公司总经理 人工智能探索网络安全 c语言软件开发平台有哪些 武汉对日软件开发招聘 广州荔枝网络技术公司上市 在数据服务器上建联合主键 衡量数据库性能的重要指标是 配置文件管理服务器 尚极互联网科技 不用数据库怎么处理 参数有误服务器无法解析dns 什么是2u 服务器
0