在PHP中将64位十六进制转换为浮点数

3

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

40F82C719999999A

如果我在IEEE-754浮点转换页面 http://babbage.cs.qc.cuny.edu/IEEE-754.old/64bit.html 上运行它,则会转换为:
99015.100000000000

我正在寻找的是一个数字。但是在PHP中我无法获得这个数字。我尝试使用各种组合的pack()和unpack(),但是还没有接近。:(


1
你是想获取 float 还是 double 表示?换句话说,你正在运行32位还是64位版本的PHP? - Flosculus
1
你能提供你正在使用的代码吗? - James
如果PHP_INT_SIZE可信,我正在运行64位PHP。 - SyntaxError
@James Code 我尝试过:$binarydata64 = pack('H*','40F82C719999999A'); $float64 = unpack("d", $binarydata64); - SyntaxError
2个回答

6
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


4019999a 应该得到 2.4,但是却得到了 6.4000015258789 - Moeez

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


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