с плавающей запятой — как преобразовать число с плавающей запятой в 64-разрядное двоичное или 32-разрядное с плавающей запятой в 64-разрядное целое

У меня есть переменная с плавающей запятой с этим значением: 8546033237

Я хочу преобразовать его в 64-битный двоичный файл и использовать этот способ для преобразования его в двоичный файл:

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

таким образом, дайте мне 32-битное значение, а не 64-битное.
затем, когда я конвертирую его обратно в число, дайте мне это:

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

результат: поплавок 8546033152

результат не равен исходному значению.

Теперь, как преобразовать его в 64-разрядный двоичный файл и наоборот правильно ??

0

Решение

в руководстве function.pack Вы получите ответ в # 93085

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;
}
0