如何将float转换为64位二进制或32位浮点数到64位int-php

时间:2014-10-21 11:21:19

标签: php floating-point binary

我有一个带有此值的浮点变量: 8546033237

我想将其转换为64位二进制文​​件并使用这种方式将其转换为二进制文件:

$a = 8546033237;
$b = pack("f",$a);

这种方式给我一个32位的值而不是64位。 然后,当我将它转换回数字给我这个:

$a = unpack("f",$b);
var_dump($a);

结果是:浮动8546033152

结果与初始值不相等。

现在如何正确地将它转换为64位二进制,反之亦然?

2 个答案:

答案 0 :(得分:0)

在手册function.pack上,您将在#93085

中得到答案

答案 1 :(得分:0)

我用这种方式将32位浮点数转换为64位二进制数:

function float2binary64($in){
        $k = '';
        while (!in_array($in,array(0,1))) {
            $k .= abs($in % 2);
            $in = floor($in / 2);
        }
        $k .= $in;

        $j = strlen($k);
        for($i=0; $i< (64-$j); $i++){
            $k .="0";
        }

        $j = 0;$l[$j] = '';$m=0;
        for($i=63; $i>= 0; $i--){
            if ($m == 32) {$j++; $l[$j] = '';$m=0;}

            $l[$j] .= $k[$i];
            $m++;
        }
        $high = bindec($l[0]);
        $low = bindec($l[1]);
        $bin = pack("N*",$high,$low);

        return $bin;
}