将64位十六进制转换为PHP中的float

时间:2015-12-03 13:23:25

标签: php hex ieee-754

我正在尝试将64位十六进制数转换为PHP中的浮点数。

40F82C719999999A

如果我在http://babbage.cs.qc.cuny.edu/IEEE-754.old/64bit.html的IEEE-754浮点转换页面中运行该转换为:

99015.100000000000

这是我正在寻找的号码。但我无法用PHP获得这个数字。我已经尝试过使用pack()和unpack()的各种组合,但我并不是很接近。 :(

2 个答案:

答案 0 :(得分:5)

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('40F82C719999999A');
echo $float;

将返回99015.1

答案 1 :(得分:0)

如何将浮点数转换为64位十六进制:

function float2hex($num) {
    $bin = pack("d", $num);
    $hex = array_map('ord', str_split($bin));
    $hex = array_reverse($hex);
    $strHex = vsprintf("%02x%02x%02x%02x%02x%02x%02x%02x", $hex);
    return $strHex;
}
$hex = float2hex(99015.100000000000);
echo strtoupper($hex);

将返回40F82C719999999A