Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 MATLAB:将uint32(4字节)值转换为相应的IEEE单精度浮点格式

在MATLAB(r2009b)中,我有一个uint32变量,包含值2147484101。

该数字(4字节)是在抓拍过程中从数码机器视觉相机中提取的。据我了解,它具有相机快门速度的单精度形式(应接近1 / 260s = 3.8ms)。

如何使用MATLAB中提供的功能将32位数字转换为其IEEE单精度浮点表示形式?

对于变量n中提到的值,我尝试使用nn = dec2hex(n,16)然后是hex2num(nn)的组合 。但是似乎hex2num期望十六进制编码是双精度的,而不是此处的单精度。至少我用这种方法得到的数字很奇怪。

有任何想法吗?

编辑:尝试过@Matt的答案如下:

typecast(uint32(2147484101),'single') %# without swapbytes typecast(swapbytes(uint32(2147484101)),'single') %# with swapbytes 这使:

ans = -6.3478820e-043 ans = -2.0640313e+003 我在http://www.h-schmidt.net/FloatApplet/IEEE754.html上尝试了IEEE 754转换器(JAVA applet)。

使用方法:

format hex typecast(uint32(2147484101),'uint8') %# without swapbytes typecast(swapbytes(uint32(2147484101)),'uint8') %# with swapbytes 给

ans = c5 01 00 80 ans = 80 00 01 c5 将这些字节输入到applet(十六进制)后,得到的数字与MATLAB相同。



回答:

我认为您所说的是基础位代表浮点数,但是您已将其存储为uint32。

如果是这种情况,您可以使用typecast()函数将其强制转换(即重新解释这些位)为单个精度浮点数。

b = typecast(a, 'single') 其中a是您的变量。

请参阅: http : //www.mathworks.com/help/techdoc/ref/typecast.html

编辑:不是强制转换功能,不是强制转换功能...抱歉!



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 05:14


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.