西莫电机圈

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 2119|回复: 1

[分享] matlab中的ubit1,ubit2表示的意思

[复制链接]

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

发表于 2013-6-19 15:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
开始看到ubit1,ubit2,想到肯定就是位,但是为什么会有1和2的区分呢?弄好半天才明白过来。

新建一个记事本文件在E盘test.txt,文件内写入一个字母a,保存。

然后用matlab读文件,程序如下:

fid=fopen('E:\test.txt','r');
c=fread(fid,8,'ubit1')   %一次性都1位,读8位才能将a读出来。如果只读一位c=fread(fid,1,'ubit1') ,结果就是1.

运行程序,得到结果是

c =

   1

   0

   0

   0

   0

   1

   1

   0

初看这个结果很不对1000 0110,因为字符a的ASCII是97,97的二进制码是0110 0001.

我笨就笨在这里,原来要倒着看才行,倒过来不就刚好就是97的二进制码。读的时候直接转化为二进制码,显示的时候从最小位开始显示。所以看的时候要从下往上看。



再来看看ubit2是怎么回事?

fid=fopen('E:\test.txt','r');
c=fread(fid,4,'ubit2')  %一次性读2位,读2次就将a读出来了。

程序运行结果是:

c =

   1

   0

   2

   1

只有四位,这个时候马上就有经验了,从下往上看,1201,再联想到ubit后面的2,马上想到每一位可能代表两个二进制码。

先表示出来就是:01 10  00 01,写在一起就是0110 0001,刚好也是97的二进制码。

  

总结:到这里就完全明白了。原来是ubit后面的数字表示是一次读几位,中间的数据表示读几次。读出来的数据用十进制来显示。那么如果一次读8位呢?就是ubit8,结果是不是应该就直接是97呢?

fid=fopen('E:\test.txt','r');
c=fread(fid,1,'ubit8')  %一次性读8位,那么a只要一次就读出来了,如果c=fread(fid,2,'ubit8') 表示一次读8位,读2次,但是文件又没有

                                   %那么多的数据,后面的为空,不显示。

程序运行如下:

c =

   97

果然是这样的。

如果一次读的位数超出了,比如读ubit10,那么结果还是97,test文件后中存储ab两个字符,就将两个字符转换成二进制,然后按照一次读十位来读。

fid=fopen('E:\test.txt','r');
c=fread(fid,1,'ubit10')

程序结果如下:

c =

  609

分析一下:a的二进制是0110 0001,b的二进制0110 0010.

排列应该是这样排列的先读a,0110 0001,不够10位,再读b的两位,从低位开始,读10

总的排列应该是10 0110 0001,转化为十进制就是609了,记住从低开始读取就行了。

如果是读两次呢?

fid=fopen('E:\test.txt','r');
c=fread(fid,2,'ubit10')

程序结果如下:

c =

  609

  24

分析如下,前面读了10位,后面只有6位,就是0110 00,转化为十进制就是24.

好了,到这里就全部明白了。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过

该用户从未签到

发表于 2018-8-2 21:31 | 显示全部楼层
多谢楼主多谢楼主
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|西莫电机圈 ( 浙ICP备10025899号-3 浙公网安备:33028202000436号

GMT+8, 2024-4-30 20:31 , Processed in 0.163219 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表