Potřeboval jsem v PHP převést binární float generovaný javou na desetinné číslo. Jelikož žádné řešení nalezené na internetu nebylo funkční, napsal jsem si vlastní. Vycházel jsem z tohoto popisu http://www.root.cz/clanky/norma-ieee-754-a-pribuzni-formaty-plovouci-radove-tecky/.

Myslím, že kód nepotřebuje komentář.


 /**
  * Binary to float.
  *
  * @param  bin   binary
  * @return float float
  */
 public function binToFloat($bin) {
  if(strlen($bin) > 32) {
   return false;
  } else if(strlen($bin) < 32) {
   $bin = str_repeat('0', (32 - strlen($bin))) . $bin;
  }

  $sign = 1;
  if(intval($bin[0]) == 1) {
   $sign = -1;
  }

  $binExponent = substr($bin, 1, 8);
  $exponent = -127;
  for($i = 0; $i < 8; $i++) {
   $exponent += (intval($binExponent[7 - $i]) * pow(2, $i));
  }

  $binBase = substr($bin, 9);
  $base = 1.0;
  for($x = 0; $x < 23; $x++) {
   $base += (intval($binBase[$x]) * pow(0.5, ($x + 1)));
  }

  $float = (float) $sign * pow(2, $exponent) * $base;

  return $float;
 }