PHP 将十六进制转换为浮点数

PHP convert hex to float

您好,我正在尝试将十六进制值转换为浮点数,我使用的方法是

function hex2float($strHex) {
$hex = sscanf($strHex, "%02x%02x%02x%02x%02x%02x%02x%02x");
$hex = array_reverse($hex);
$bin = implode('', array_map('chr', $hex));
$array = unpack("dnum", $bin);
return $array['num'];
}

$float = hex2float('4019999a');
echo $float;

输出

它返回的输出是 6.4000015258789 但实际上它应该是 2.4

reference

您的问题是您正在以小端字节顺序解释值。这为您提供了 6.4 的错误值,实际上是 -6.3320110435437E-23。此外,您将其解包为双精度浮点数。不是。它是单精度的(只有 4 个字节宽)。

function hex2float($strHex) {
    $hex = sscanf($strHex, "%02x%02x%02x%02x%02x%02x%02x%02x");
    $bin = implode('', array_map('chr', $hex));
    $array = unpack("Gnum", $bin);
    return $array['num'];
}

$float = hex2float('4019999a');
echo $float;

这为您提供了正确的值 2.4。

一种更简单的方法是 var_dump(unpack('G', hex2bin('4019999a'))[1]);,它也可以为您提供正确的值。