【问题标题】:how convert float to 64bit binary or 32bit float to 64bit int - php如何将浮点数转换为 64 位二进制或 32 位浮点数到 64 位整数 - php
【发布时间】:2014-10-21 11:21:19
【问题描述】:

我有一个具有以下值的浮点变量:8546033237

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

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

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

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

结果是:float 8546033152

结果不等于初始值。

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

【问题讨论】:

    标签: php floating-point binary


    【解决方案1】:

    在手册 function.pack 中您会在 #93085 中得到答案

    【讨论】:

    • 我读过它,但我不明白如何使用它来将浮点数转换为二进制数。请解释更多
    • 让您的服务器拥有一台支持 64 位的机器和 PHP 发行版?
    • 不,我的 php 版本是 5.4.3,不支持 64 位整数
    【解决方案2】:

    我使用这种方式将 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 2016-03-08
      相关资源
      最近更新 更多