Скрипт за конвертиране от двоична в десетична бр. система

Prio

Registered
Здравейте, търся някакво скриптче за конвертиране от двоичната (1011) в десетичнатабройна система (нормално си число) и обратно. Може ли някой да ми помогне?

Благодаря :)

ПП: Видях една тема, но нищо не разбрах, имайте го предвид.
 
Заповядай
Код:
<?php 
//***************************************************************************** 
// Copyright 2003 by A J Marston <http://www.tonymarston.net> 
// Distributed under the GNU General Public Licence 
//***************************************************************************** 

// 
// Convert a number from base10 (decimal) to baseX where X is is the range 2-36. 
// 
// It will also convert a number from baseX back into base10. 

?> 
<html> 
<head> 
  <title>Binary-Octal-Decimal-Hexadecimal Converter</title> 
  <style type="text/css"> 
   
  </style> 
</head> 
<body> 
<div align="center"> 
<h1>Bin-Oct-Dec-Hex Converter</h1> 

<?php 
// look for no POST entries, or the RESET button 
if (count($_POST) == 0 or isset($_POST['reset'])) { 
    // POST array is empty - set initial values 
    $dec_input   = null; 
    $dec_output  = null; 
    $base2value  = null; 
    $base8value  = null; 
    $base16value = null; 
    $base36value = null; 
} else { 
    // retrieve values from POST array 
    $dec_input   = &$_POST['dec_input']; 
    $dec_output  = null; 
    $base2value  = &$_POST['base2value']; 
    $base8value  = &$_POST['base8value']; 
    $base16value = &$_POST['base16value']; 
    $base36value = &$_POST['base36value']; 
} // if 

// initialise array for validation errors 
$error = array(); 

if (isset($_POST['dec-2-bin'])) { 
    $base2value = dec2string($dec_input, 2); 
} // if 
if (isset($_POST['dec-2-oct'])) { 
    $base8value = dec2string($dec_input, 8); 
} // if 
if (isset($_POST['dec-2-hex'])) { 
    $base16value = dec2string($dec_input, 16); 
} // if 
if (isset($_POST['dec-2-b36'])) { 
    $base36value = dec2string($dec_input, 36); 
} // if 
if (isset($_POST['bin-2-dec'])) { 
    $dec_output = string2dec($base2value, 2); 
    if ($error) { 
       $error['base2value'] = $error[0]; 
    } // if 
} // if 
if (isset($_POST['oct-2-dec'])) { 
    $dec_output = string2dec($base8value, 8); 
    if ($error) { 
       $error['base8value'] = $error[0]; 
    } // if 
} // if 
if (isset($_POST['hex-2-dec'])) { 
    $dec_output = string2dec($base16value, 16); 
    if ($error) { 
       $error['base16value'] = $error[0]; 
    } // if 
} // if 
if (isset($_POST['b36-2-dec'])) { 
    $dec_output = string2dec($base36value, 36); 
    if ($error) { 
       $error['base36value'] = $error[0]; 
    } // if 
} // if 

if (isset($_POST['plus1'])) { 
   $dec_input = bcadd($dec_input, 1); 
} // if 
if (isset($_POST['minus1'])) { 
   $dec_input = bcsub($dec_input, 1); 
} // if 

?> 
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST"> 
<table border="0"> 
<colgroup align="right"> 
<colgroup align="left"> 
<colgroup align="left"> 
<colgroup align="left"> 
<tr> 
    <td>Decimal (input)</td> 
    <td><input type="text" name="dec_input" value="<?php echo $dec_input ?>" size="55"/> 
<?php 
    if (array_key_exists('dec_input', $error)) { 
        echo '<p class="error">' .$error['dec_input'] .'</p>'; 
    } // if 
?> 
    </td> 
    <td><input type="submit" name="plus1" value="+1" />  
        <input type="submit" name="minus1" value="-1" /></td> 
    <td></td> 
</tr> 
<tr> 
    <td>Decimal (output)</td><td colspan="3"><?php echo $dec_output ?></td> 
</tr> 
<tr class="grey"> 
    <td>Binary (Base 2)</td> 
    <td><input type="text" name="base2value" value="<?php echo $base2value ?>" size="40" /> 
<?php 
    if (array_key_exists('base2value', $error)) { 
        echo '<p class="error">' .$error['base2value'] .'</p>'; 
    } // if 
?> 
    </td> 
    <td><input type="submit" name="dec-2-bin" value="DEC to BIN" /></td> 
    <td><input type="submit" name="bin-2-dec" value="BIN to DEC" /></td> 
</tr> 
<tr class="grey"> 
    <td>Octal (Base 8)</td> 
    <td><input type="text" name="base8value" value="<?php echo $base8value ?>" size="40" /> 
<?php 
    if (array_key_exists('base8value', $error)) { 
        echo '<p class="error">' .$error['base8value'] .'</p>'; 
    } // if 
?> 
    </td> 
    <td><input type="submit" name="dec-2-oct" value="DEC to OCT" /></td> 
    <td><input type="submit" name="oct-2-dec" value="OCT to DEC" /></td> 
</tr> 
<tr class="grey"> 
    <td>Hexadecimal (Base 16)</td> 
    <td><input type="text" name="base16value" value="<?php echo $base16value ?>" size="40" /> 
<?php 
    if (array_key_exists('base16value', $error)) { 
        echo '<p class="error">' .$error['base16value'] .'</p>'; 
    } // if 
?> 
    </td> 
    <td><input type="submit" name="dec-2-hex" value="DEC to HEX" /></td> 
    <td><input type="submit" name="hex-2-dec" value="HEX to DEC" /></td> 
</tr> 
<tr class="grey"> 
    <td>Base 36</td> 
    <td><input type="text" name="base36value" value="<?php echo $base36value ?>" size="40" /> 
<?php 
    if (array_key_exists('base36value', $error)) { 
        echo '<p class="error">' .$error['base36value'] .'</p>'; 
    } // if 
?> 
    </td> 
    <td><input type="submit" name="dec-2-b36" value="DEC to B36" /></td> 
    <td><input type="submit" name="b36-2-dec" value="B36 to DEC" /></td> 
</tr> 
</table> 
<p><input type="submit" name="reset" value="reset" /></p> 
</form> 

</div> 
</body> 
</html> 
<?php 
function dec2string ($decimal, $base) 
// convert a decimal number into a string using $base 
{ 
    //DebugBreak(); 
   global $error; 
   $string = null; 

   $base = (int)$base; 
   if ($base < 2 | $base > 36 | $base == 10) { 
      echo 'BASE must be in the range 2-9 or 11-36'; 
      exit; 
   } // if 

   // maximum character string is 36 characters 
   $charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 

   // strip off excess characters (anything beyond $base) 
   $charset = substr($charset, 0, $base); 

   if (!ereg('(^[0-9]{1,50}$)', trim($decimal))) { 
      $error['dec_input'] = 'Value must be a positive integer with < 50 digits'; 
      return false; 
   } // if 

   do { 
      // get remainder after dividing by BASE 
      $remainder = bcmod($decimal, $base); 

      $char      = substr($charset, $remainder, 1);   // get CHAR from array 
      $string    = "$char$string";                    // prepend to output 

      //$decimal   = ($decimal - $remainder) / $base; 
      $decimal   = bcdiv(bcsub($decimal, $remainder), $base); 

   } while ($decimal > 0); 

   return $string; 

} // dec2string 

// **************************************************************************** 
function string2dec ($string, $base) 
// convert a string into a decimal number using $base 
{ 

   global $error; 
   $decimal = 0; 

   $base = (int)$base; 
   if ($base < 2 | $base > 36 | $base == 10) { 
      echo 'BASE must be in the range 2-9 or 11-36'; 
      exit; 
   } // if 

   // maximum character string is 36 characters 
   $charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 

   // strip off excess characters (anything beyond $base) 
   $charset = substr($charset, 0, $base); 

   $string = trim($string); 
   if (empty($string)) { 
      $error[] = 'Input string is empty'; 
      return false; 
   } // if 

   do { 
      $char   = substr($string, 0, 1);    // extract leading character 
      $string = substr($string, 1);       // drop leading character 

      $pos = strpos($charset, $char);     // get offset in $charset 
      if ($pos === false) { 
         $error[] = "Illegal character ($char) in INPUT string"; 
         return false; 
      } // if 

      //$decimal = ($decimal * $base) + $pos; 
      $decimal = bcadd(bcmul($decimal, $base), $pos); 

   } while($string <> null); 

   return $decimal; 

} // string2dec 
?>

Ето и как ще ти изглежда конверторчето демо
 

Back
Горе