MATLAB:将 uint32(4 字节)值转换为相应的 IEEE 单精度浮点形式

标签 matlab binary floating-point ieee-754 double-precision

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

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

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

在变量 n 中提到的值,我尝试使用 nn=dec2hex(n,16)hex2num(nn)。但似乎 hex2num 期望十六进制编码是 double 的,而不是这里的单精度。至少我用这种方法得到了奇怪的数字。

有什么想法吗?

编辑:尝试@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

将这些字节输入小程序(十六进制)得到与 MATLAB 相同的数字。

最佳答案

我认为您的意思是底层位表示 float ,但您已将其存储为 uint32。

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

b = typecast(a, 'single')

其中 a 是您的变量。

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

已编辑:不是转换函数,而是类型转换函数...我很抱歉!

关于MATLAB:将 uint32(4 字节)值转换为相应的 IEEE 单精度浮点形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5001923/

相关文章:

matlab - MATLAB 教程中的 SIFT 实现

matlab - 基于多种条件的逻辑索引

python - 在 Python 中的二进制数中添加下划线作为分隔符

c# - 将 PDF 保存为 SQL 二进制文件 (.Net)

python - 为真陈述而假

python - 2.4 和 2.7 之间内置 round() 函数的 Python 变化

ruby - 某些 `BigDecimal` 值与 `Float` 不匹配

c++ - Mex 编译宏

matlab - 如何将高斯拟合到 matlab/octave 中的数据?

c - 如何在C中将数据写入二进制文件