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)