У меня есть какие-то двоичные данные.Я пытаюсь получить 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);
}
По моему пониманию, они должны генерировать тот же результат,Я что-то упускаю, чтобы понять?