Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
在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 编辑:不是强制转换功能,不是强制转换功能...抱歉! 更多&回答... |
![]() |
![]() |