zoukankan      html  css  js  c++  java
  • PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]

    自己写了一个PHP进制转换程序,一个类吧,第一次写这个东东,写这个东东,在处理文本文件时能用得到。
     
    可以实现:
    10进制转换2、8、16、36、62进制
    2、8、16、36、62进制转换10进制
    有点要注意下,2、8、16进制转换时,使用的是系统的自己的函数。
    所以,不管怎么高精度转换值可能大于2147483646。
    另外,
    32进制低精转换,最大值:2147483646;
    32进制高精转换,最大值:77309411327;
    64进制高精转换,最大值:133143986175。
     
    jinzhi.php文件,自带演示功能。
     
    <?php
    $mtime1 = explode(" ", microtime());
    $startTime = $mtime1[0] + $mtime1[1];
    ?>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>进制转换</title>
    </head>
    <body>
    <form id="jzh" name="jinzhih" method="post" action="<?php echo $_SERVER['PHP_SELF'].'?p=1';?>">
    <input name="go" type="hidden" value="100">
      <table width="482" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFE8E8" bgcolor="#F4F8FB">
        <tr>
          <td width="194"><select name="jinzhi0" id="jinzhi0">
            <option value="2">2</option>
            <option value="8">8</option>
            <option value="10" selected="selected">10</option>
            <option value="16">16</option>
            <option value="36">36</option>
            <option value="62">62</option>
          </select>
    进制</td>
          <td width="275"><input name="zhi" type="text" id="zhi" /></td>
        </tr>
        <tr>
          <td>进行<input name="lx" type="radio" value="0" checked="checked" />
    普通<input type="radio" name="lx" value="1" />高精</td><td>&nbsp;</td>
        </tr>
        <tr>
          <td>转换为
            <select name="jinzhi1" id="jinzhi1">
              <option value="2" selected="selected">2</option>
              <option value="8">8</option>
              <option value="10">10</option>
              <option value="16">16</option>
              <option value="36">36</option>
              <option value="62">62</option>
            </select>进制,</td><td>总长度为
            <input name="changdu" type="text" id="changdu" value="10" size="4" maxlength="2" />
    字符。</td></tr><tr>
          <td><input type="submit" name="Submit" value="提交" /></td>
          <td><input type="reset" name="Submit2" value="重置" /></td>
        </tr></table>
      <p>注意:仅能进行10进制转换为2、81636、62进制;或反转换。</p></form>
    <?php
    /*
    * ===========================================
    * 项目: 进制转换
    * 版本: 1.0
    * 团队: 3Vshej
    * 作者: 网游世界
    * 功能: 10进制转换2、8、16、36、62进制
            2、8、16、36、62进制转换10进制
    * ===========================================
    * Copyright (c) 2008
    * 团队主页: http://www.3vshej.cn
    * 团队信箱: 3vshej+163.com[+=@]
    * 创建日期: 2008-11-3
    * 修改日期: 暂无
    * 修改说明: ----
    * 版权声明: 免费软件
    * ===========================================
    */
    class jinzhi_class
    { 
             //10进制转2、8、16、36、62进制
    
             function jinzhih_0($shu,$jinzhi,$w)
             {
             $zifu = "";
             while ($shu!=0){
             $linshi = $shu%$jinzhi;
             switch ($jinzhi){
                 case 2:
                     $zifu = decbin($shu);
                     return $zifu;
                   case 8:
                     $zifu = decoct($shu);
                     return $zifu;
                 case 16:
                     $zifu = dechex($shu);
                     return $zifu;
                 case 36:
                     if ($linshi>=10)
                      {
                      $zifu.= chr(($linshi+55));
                      }else{
                            $zifu.= $linshi;}
                     break;
                 case 62:
                      if (($linshi>=10) && ($linshi<36)) {$zifu.= chr($linshi+55);break;}
                      if (($linshi>=36) && ($linshi<62)) {$zifu.= chr($linshi+61);break;}
                      $zifu.= $linshi;break;
             default:
             $zifu.= $linshi;
             break;
             }
             $shu = intval($shu/$jinzhi);
             }
             for ($i=strlen($zifu);$i<$w;$i++)
             $zifu.="0";
            return strrev($zifu);}
             
             //2、8、16、36、62进制转10进制
    
             function jinzhih_1($zifu,$jinzhi,$w)
        { $shu=0;
            for ($i=0;$i<=strlen($zifu)-1;$i++)
                     {
                     $linshi = substr($zifu,$i,1);
                     switch ($jinzhi){
                         case 2:
                             $shu = bindec($zifu);
                             $i=strlen($zifu)+1;
                             break;
                         case 8:
                             $shu = octdec($zifu);
                         $i=strlen($zifu)+1;
                         break;
                         case 16:
                             $shu = hexdec($zifu);
                             $i=strlen($zifu)+1;
                             break;
                        case 36:
                            if (ord($linshi)<=57)
                            {$shu+=(ord($linshi)-48)*pow($jinzhi,strlen($zifu)-$i-1);
                        }else{
                             $shu=$shu + (ord($linshi)-55)*pow($jinzhi,strlen($zifu)-$i-1);}
                             break;
                        case 62:
                         if (ord($linshi)<=57) 
                         {$shu+=$linshi*pow($jinzhi,strlen($zifu)-$i-1);                 
                        }elseif ((ord($linshi)>=65) && (ord($linshi)<=90)){
                         $shu+= (ord($linshi)-55)*pow($jinzhi,strlen($zifu)-$i-1);
                         }else{
                         $shu+= (ord($linshi)-61)*pow($jinzhi,strlen($zifu)-$i-1);}
                         break;
                        }
             }
             return $shu;    }
             
             //10进制高精度转换2、8、16、36、62进制
    
             function jinzhih_G0($shu,$jinzhi,$w)
             {
             $zifu = "";
             while ($shu!=0){
             $linshi = bcmod($shu,$jinzhi);
             switch ($jinzhi){
                 case 2:
                     $zifu = decbin($shu);
                     return $zifu;
                   case 8:
                     $zifu = decoct($shu);
                     return $zifu;
                 case 16:
                     $zifu = dechex($shu);
                     return $zifu;
                 case 36:
                     if ($linshi>=10)
                      {
                      $zifu.= chr(($linshi+55));
                      }else{
                            $zifu.= $linshi;}
                     break;
                 case 62:
                      if (($linshi>=10) && ($linshi<36)) {$zifu.= chr($linshi+55);break;}
                      if (($linshi>=36) && ($linshi<62)) {$zifu.= chr($linshi+61);break;}
                      $zifu.= $linshi;break;
             default:
             $zifu.= $linshi;
             break;
             }
             $shu = intval(bcdiv($shu,$jinzhi));
             }
             for ($i=strlen($zifu);$i<$w;$i++)
             $zifu.="0";
            return strrev($zifu);}
             
             //2、8、16、36、62进制高精度转换10进制
    
             function jinzhih_G1($zifu,$jinzhi,$w)
        {    $shu= "";
            for ($i=0;$i<=strlen($zifu)-1;$i++)
                     {
                     $linshi = substr($zifu,$i,1);
                     switch ($jinzhi){
                         case 2:
                             $shu = bindec($zifu);
                             $i=strlen($zifu)+1;
                             break;
                         case 8:
                             $shu = octdec($zifu);
                         $i=strlen($zifu)+1;
                         break;
                         case 16:
                             $shu = hexdec($zifu);
                             $i=strlen($zifu)+1;
                             break;
                        case 36:
                            if (ord($linshi)<=57)
                            {$shu=bcadd($shu,bcmul((ord($linshi)-48),bcpow($jinzhi,strlen($zifu)-$i-1)));
                        }else{
                             $shu=bcadd($shu,bcmul((ord($linshi)-55),bcpow($jinzhi,strlen($zifu)-$i-1)));}
                             break;
                        case 62:
                         if (ord($linshi)<=57)
                         {$shu=bcadd($shu,bcmul($linshi,bcpow($jinzhi,strlen($zifu)-$i-1)));
                        }elseif ((ord($linshi)>=65) && (ord($linshi)<=90)){
                         $shu=bcadd($shu,bcmul((ord($linshi)-55),bcpow($jinzhi,strlen($zifu)-$i-1)));
                         }else{
                         $shu=bcadd($shu,bcmul((ord($linshi)-61),bcpow($jinzhi,strlen($zifu)-$i-1)));
                         }
                         break;
                        }
             }
             return $shu;}
    }
    
    if (isset($_GET["p"]))
    {if ($_GET["p"]==="1"){
    echo "<p>";
    echo "提示:<br>";
    echo "32进制低精转换,最大值:2147483646<br>";
    echo "32进制高精转换,最大值:77309411327<br>";
    echo "64进制高精转换,最大值:133143986175<br>";
    echo "</p>";
    
    echo "值为:<font color=#ff0000><b>";
    $Fs = new jinzhi_class();
    if ($_POST['lx']=="0" && $_POST['jinzhi0']=="10")
    {echo $Fs->jinzhih_0($_POST['zhi'],$_POST['jinzhi1'],$_POST['changdu'])."<br>";}
    
    if ($_POST['lx']=="1" && $_POST['jinzhi0']=="10") 
    {echo $Fs->jinzhih_G0($_POST['zhi'],$_POST['jinzhi1'],$_POST['changdu']);}
    
    if ($_POST['lx']=="0" && $_POST['jinzhi0']<>"10")
    {echo $Fs->jinzhih_1($_POST['zhi'],$_POST['jinzhi0'],$_POST['changdu']);}
    
    if ($_POST['lx']=="1" && $_POST['jinzhi0']<>"10")
    {echo $Fs->jinzhih_G1($_POST['zhi'],$_POST['jinzhi0'],$_POST['changdu']);}
           }
    echo "</b></font>";}
    $mtime1 = explode(" ", microtime());
    $endTime = $mtime1[0] + $mtime1[1];
    printf ("<br>页面执行时间:%.6fs.</body></html>",$endTime-$startTime);
    ?>
  • 相关阅读:
    Algs4-1.4DoublingRatio
    Algs4-1.4TwoSumFast
    Algs4-1.4ThreeSumFast
    Algs4-1.4ThreeSum
    Algs4-1.4TwoSum
    Algs4-1.3.50快速出错的迭代器
    *Algs4-1.3.49栈与队列-(未解决)
    Algs4-1.3.4X栈与队列-两个栈实现一个队列均摊O(1)
    Algs4-1.3.47可连接的队列、栈或steque
    Java的垃圾回机机制(见过讲得最清楚的)
  • 原文地址:https://www.cnblogs.com/archoncap/p/5241480.html
Copyright © 2011-2022 走看看