PHP распаковать float вернуть неожиданный ответ - PullRequest
0 голосов
/ 27 мая 2018

У меня есть какие-то двоичные данные.Я пытаюсь получить Float из этих данных.У нас уже есть Java-версия для этой программы.Итак, мы уже знаем, какой результат мы должны получить.Когда мы пытаемся использовать следующий код Php, результат не тот, который мы ожидали.

Вот код, который я использовал:

$readData = fread($stream, 4);
var_dump(unpack("f*", $readData)[1]); // -23944359936 wrong one

Но если я попытаюсь получить Шестнадцатеричный сначала из этого двоичного файла и преобразование этого шестнадцатеричного в Float , мы получаем ожидаемый результат.

$readData = fread($stream, 4);
var_dump(self::hexTo32Float(bin2hex($readData))); // 0.22529149055481

public static function hexTo32Float($strHex) {
        $v = hexdec($strHex);
        $x = ($v & ((1 << 23) - 1)) + (1 << 23) * ($v >> 31 | 1);
        $exp = ($v >> 23 & 0xFF) - 127;
        return $x * pow(2, $exp - 23);
}

По моему пониманию, они должны генерировать тот же результат,Я что-то упускаю, чтобы понять?

...