我不明白 MATLAB 中和它们的对立面之间的hex2dec
区别hex2num
。
假设我有一个十六进制值 3FD3B502C055FE00。当我使用hex2dec
时,我得到 4.5992e+018 。当我使用hex2num
时,我得到 0.3079。这是怎么回事?
正如您所注意到的,这些函数的工作方式非常不同。hex2dec
通过原始字节转换将十六进制字符串转换为浮点数,我认为您发现这可以按预期工作。但是,hex2num
将十六进制字符串转换为其IEEE 双精度表示。
IEEE 754 双精度标准要求使用一位符号、11 位指数和 52 位小数。因此hex2num
以这种格式解析十六进制,产生与hex2dec
.
hex2dec - 将十六进制数字字符串转换为十进制数字
说明 d = hex2dec('hex_value') 将 hex_value 转换为其浮点整数表示。参数 hex_value 是存储在 MATLAB 字符串中的十六进制整数。hex_value 的值必须小于十六进制的 10,000,000,000,000。
如果 hex_value 是一个字符数组,则每一行都被解释为一个十六进制字符串。
hex2num - 将十六进制数字字符串转换为双精度数字
说明 n = hex2num(S),其中 S 是一个 16 字符的字符串,表示一个十六进制数,返回它表示的 IEEE® 双精度浮点数 n。少于 16 个字符在右侧用零填充。如果 S 是字符数组,则每一行都被解释为一个双精度数。
正确处理了 NaN、无穷大和 denorms。
知道 3FD3B502C055FE00 大于 (10,000,000,000,000)16,超出范围。