![]() |
MATLAB:将uint32(4字节)值转换为相应的IEEE单精度浮点格式
在MATLAB(r2009b)中,我有一个uint32变量,包含值2147484101。
该数字(4字节)是在抓拍过程中从数码机器视觉相机中提取的。据我了解,它具有相机快门速度的单精度形式(应接近1 / 260s = 3.8ms)。 如何使用MATLAB中提供的功能将32位数字转换为其IEEE单精度浮点表示形式? 对于变量[I]n中[/I]提到的值,我尝试使用[I]nn = dec2hex(n,16)[/I]然后是[I]hex2num(nn)的组合[/I] 。但是似乎[I]hex2num[/I]期望十六进制编码是双精度的,而不是此处的单精度。至少我用这种方法得到的数字很奇怪。 有任何想法吗? [B]编辑:[/B]尝试过@Matt的答案如下: typecast(uint32(2147484101),'single') %# without swapbytes typecast(swapbytes(uint32(2147484101)),'single') %# with swapbytes 这使: ans = -6.3478820e-043 ans = -2.0640313e+003 我在[URL="http://www.h-schmidt.net/FloatApplet/IEEE754.html"]http://www.h-schmidt.net/FloatApplet/IEEE754.html上[/URL]尝试了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相同。 [B]回答:[/B] 我认为您所说的是基础位代表浮点数,但是您已将其存储为uint32。 如果是这种情况,您可以使用typecast()函数将其强制转换(即重新解释这些位)为单个精度浮点数。 b = typecast(a, 'single') 其中a是您的变量。 请参阅: [URL="http://www.mathworks.com/help/techdoc/ref/typecast.html"]http[/URL] : [URL="http://www.mathworks.com/help/techdoc/ref/typecast.html"]//www.mathworks.com/help/techdoc/ref/typecast.html[/URL] 编辑:不是强制转换功能,不是强制转换功能...抱歉! [url=https://stackoverflow.com/questions/5001923]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 04:51。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.