在MATLAB (r2009b)中,我有一个包含值2147484101的uint32变量。
这个数字(它的4个字节)是从一台数字机器视觉相机中提取的,在抓取过程中产生。
据我所知,它保存着相机快门速度的单精度形式(应该接近1/260秒=3.8毫秒)。
如何将这个32位数转换为其IEEE单精度浮点表示——使用MATLAB中可用的内容?
使用变量n中提到的值,我尝试使用nn=dec2hex(n,16)的组合,然后是。但似乎hex2num期望十六进制编码是双精度而不是这里的单精度。至少用这种方法我得到了奇怪的数字。
有什么想法吗?
编辑:尝试了下面@Matt的答案:
我尝试了位于http://www.h-schmidt.net/FloatApplet/IEEE754.html的IEEE 754转换器(JAVA小程序)。
使用方法如下:
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小程序)。
使用方法如下:
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
将这些字节(十六进制)输入小程序,可以得到与 MATLAB 相同的数字。