Преобразовать int bytestream в float bytestream - PullRequest
0 голосов
/ 19 июня 2010

У меня 32-разрядное целое число.Поток битов фактически является потоком битов для 32-разрядного числа с плавающей запятой (IEEE 754).Я попытался преобразовать его с помощью:

unpack('f', $input);

Это генерирует число с плавающей точкой, но кажется, что это не правильное число

Например, если я передам 1, я должен выйти с1.4012984e-45, в соответствии с IEEE754 конвертером , но я иду с 2.5638762224389E-9

Большое спасибо за любую помощь / совет.

1 Ответ

0 голосов
/ 19 июня 2010

Вы путаете вещи:

<?php
$s = "\x01\x00\x00\x00";
$t = "0001"; //same as "\x30\x30\x30\x31"
var_dump(unpack('f', $s));
var_dump(unpack('f', $t));

дает

array(1) {
  [1]=>
  float(1.4012984643248E-45)
}
array(1) {
  [1]=>
  float(2.5638762224389E-9)
}

Согласно руководству, эти результаты не гарантируются (модификатор "f" в unpack будет зависетьна порядковый номер системы).Но одна вещь - это байтовый поток, который на самом деле имеет эти значения, а другая вещь - иметь байтовый поток, который может преобразовываться в «0001», когда рассматривается кодировка ASCII.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...