Binární reprezentace (IEEE754) na float v PHP

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; } [/php]

Napsat komentář

Vaše emailová adresa nebude zveřejněna.