将十六进制转换为单精度浮点数

4
我在Matlab中遇到了将32位十六进制表达式转换为单精度数的问题。num2hex函数对这两种情况都可行。例如,
b = 0.4 class(b) num2hex(b) num2hex(single(b))
但是,这种方法不能逆向操作。hex2num函数只能将十六进制表达式转换为双精度数。所以,
b = 0.4 num2hex(single(b)) hex2num(ans)
Matlab会简单地填充零以使其成为64位十六进制数。是否有一种方法可以执行此转换?

1
对于正向转换(NUM2HEX),您还可以使用FPRINTF/SPRINTF:sprintf('%bx',b)sprintf('%tx',single(b)) - Amro
2个回答

10

我发现在MATLAB中有一种使用内置函数来完成这个任务的方法。

%#Let's convert 0x40100000 to Single Precision Float (should equal 2.25)

tempHex = '40100000';

tempVal = uint32(hex2dec(tempHex));

tempFloat = typecast(tempVal,'single')
%#result is 2.25

这是最佳答案,因为它提供了精确所需的功能。 - Veridian
如果 hex2num 不可用,可以使用 typecast(uint64(hex2dec('400921fb54442d18')),'double') - Carl Witthoft

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接