 gorec » 13 июл 2009, 13:01
 gorec » 13 июл 2009, 13:01 
			
			Вот черновой, но рабочий результат моих бдений на этом поприще:
function str2bin($str) {
   for($a=0; $a < strlen($str); $a++) {
       $dec = ord($str{$a});
       for($i=7; $i>=0; $i--) {
           if ( $dec >= pow(2, $i) )
            { $bin .= "1"; $dec -= pow(2, $i); }
           else { $bin .= "0"; }
       }
   }
   return $bin;
}
function bin2str($bin) {
    $bin_ = str_split($bin, 8);
    for($i=0;$i<count($bin_);$i++) {
        $bin_[$i] = join('',array_reverse(preg_split('//',$bin_[$i],-1,PREG_SPLIT_NO_EMPTY)));
        $ascii .= chr(bindec($bin_[$i]));
        }
    return $ascii;
}
function float_string2binary80bit($float) {
$x=pack('d', $float);
$x = join('',array_reverse(preg_split('//',$x,-1,PREG_SPLIT_NO_EMPTY)));
$str_x = join('',array_reverse(preg_split('//',str2bin($x),-1,PREG_SPLIT_NO_EMPTY)));
$my = unpack ("a52mantissa/a11exponent/a1sign",$str_x);
$m=$my['mantissa'];  $e=$my['exponent'];  $s=$my['sign'];
$e="001000000000001"; $ie80="00000000000".$m."1".$e.$s; //тут не совсем корректно - правильными будут только числа с двумя цифрами перед запятой!
$bie80=bin2str($ie80);
return $bie80;
}
						
			
								
					- За это сообщение автора gorec поблагодарил:
- mmxland (13 фев 2013, 15:32)