在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
编辑:不是强制转换功能,不是强制转换功能...抱歉!
更多&回答...