当前位置:首页 > PHP教程 > php应用 > 列表

PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)

发布:smiling 来源: PHP粉丝网  添加日期:2018-07-26 17:50:00 浏览: 评论:0 

本文实例讲述了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文件,自带演示功能。

  1. <?php 
  2. $mtime1=explode(" ", microtime()); 
  3. $startTime=$mtime1[0] +$mtime1[1]; 
  4. ?> 
  5. <html xmlns="http://www.w3.org/1999/xhtml"
  6. <head> 
  7. <meta http-equiv="Content-Type"content="text/html; charset=gb2312"/> 
  8. <title>进制转换/title> 
  9. </head> 
  10. <body> 
  11. <form id="jzh"name="jinzhih"method="post"action=""
  12. <input name="go"type="hidden"value="100"
  13. <table width="482"border="1"cellpadding="0"cellspacing="0"bordercolor="#FFE8E8"bgcolor="#F4F8FB"
  14.  <tr> 
  15.   <td width="194"><select name="jinzhi0"id="jinzhi0"
  16.   <option value="2">2</option> 
  17.   <option value="8">8</option> 
  18.   <option value="10"selected="selected">10</option> 
  19.   <option value="16">16</option> 
  20.   <option value="36">36</option> 
  21.   <option value="62">62</option> 
  22.   </select> 
  23. 进制</td> 
  24.  <td width="275"><input name="zhi"type="text"id="zhi"/></td> 
  25.  </tr> 
  26.  <tr> 
  27.   <td>进行<input name="lx"type="radio"value="0"checked="checked"/> 
  28. 普通<input type="radio"name="lx"value="1"/>高精</td><td> </td> 
  29.  </tr> 
  30.  <tr> 
  31.   <td>转换为 
  32.   <select name="jinzhi1"id="jinzhi1"
  33.    <option value="2"selected="selected">2</option> 
  34.    <option value="8">8</option> 
  35.    <option value="10">10</option> 
  36.    <option value="16">16</option> 
  37.    <option value="36">36</option> 
  38.    <option value="62">62</option> 
  39.   </select>进制,</td><td>总长度为 
  40.   <input name="changdu"type="text"id="changdu"value="10"size="4"maxlength="2"/> 
  41. 字符。</td></tr><tr> 
  42.  <td><input type="submit"name="Submit"value="提交"/></td> 
  43.  <td><input type="reset"name="Submit2"value="重置"/></td> 
  44.  </tr></table> 
  45.  <p>注意:仅能进行10进制转换为2、8、16、36、62进制;或反转换。</p></form> 
  46. <?php 
  47. classjinzhi_class 
  48.    //10进制转2、8、16、36、62进制 
  49.    functionjinzhih_0($shu,$jinzhi,$w
  50.    { 
  51.    $zifu=""
  52.    while($shu!=0){ 
  53.    $linshi=$shu%$jinzhi
  54.    switch($jinzhi){ 
  55.     case2: 
  56.      $zifu=decbin($shu); 
  57.      return$zifu
  58.     case8: 
  59.      $zifu=decoct($shu); 
  60.      return$zifu
  61.     case16: 
  62.      $zifu=dechex($shu); 
  63.      return$zifu
  64.     case36: 
  65.      if($linshi>=10) 
  66.      { 
  67.      $zifu.=chr(($linshi+55)); 
  68.      }else
  69.       $zifu.=$linshi;} 
  70.      break
  71.     case62: 
  72.      if(($linshi>=10) && ($linshi36)) {$zifu.=chr($linshi+55);break;} 
  73.      if(($linshi>=36) && ($linshi62)) {$zifu.=chr($linshi+61);break;} 
  74.      $zifu.=$linshi;break
  75.    default
  76.    $zifu.=$linshi
  77.    break
  78.    } 
  79.    $shu=intval($shu/$jinzhi); 
  80.    } 
  81.    for($i=strlen($zifu);$i$w;$i++) 
  82.    $zifu.="0"
  83.   returnstrrev($zifu);} 
  84.    //2、8、16、36、62进制转10进制 
  85.    functionjinzhih_1($zifu,$jinzhi,$w
  86.  {$shu=0; 
  87.   for($i=0;$i=strlen($zifu)-1;$i++) 
  88.      { 
  89.      $linshi=substr($zifu,$i,1); 
  90.      switch($jinzhi){ 
  91.       case2: 
  92.        $shu=bindec($zifu); 
  93.        $i=strlen($zifu)+1; 
  94.        break
  95.       case8: 
  96.        $shu= octdec($zifu); 
  97.       $i=strlen($zifu)+1; 
  98.       break
  99.       case16: 
  100.        $shu= hexdec($zifu); 
  101.        $i=strlen($zifu)+1; 
  102.        break
  103.      case36: 
  104.       if(ord($linshi)=57) 
  105.       {$shu+=(ord($linshi)-48)*pow($jinzhi,strlen($zifu)-$i-1); 
  106.      }else
  107.        $shu=$shu+ (ord($linshi)-55)*pow($jinzhi,strlen($zifu)-$i-1);} 
  108.        break
  109.      case62: 
  110.       if(ord($linshi)=57) 
  111.       {$shu+=$linshi*pow($jinzhi,strlen($zifu)-$i-1);     
  112.      }elseif((ord($linshi)>=65) && (ord($linshi)=90)){ 
  113.       $shu+= (ord($linshi)-55)*pow($jinzhi,strlen($zifu)-$i-1); 
  114.       }else
  115.       $shu+= (ord($linshi)-61)*pow($jinzhi,strlen($zifu)-$i-1);} 
  116.       break
  117.      } 
  118.    } 
  119.    return$shu
  120.    } 
  121.    //10进制高精度转换2、8、16、36、62进制 
  122.    functionjinzhih_G0($shu,$jinzhi,$w
  123.    { 
  124.    $zifu=""
  125.    while($shu!=0){ 
  126.    $linshi=bcmod($shu,$jinzhi); 
  127.    switch($jinzhi){ 
  128.     case2: 
  129.      $zifu=decbin($shu); 
  130.      return$zifu
  131.     case8: 
  132.      $zifu=decoct($shu); 
  133.      return$zifu
  134.     case16: 
  135.      $zifu=dechex($shu); 
  136.      return$zifu
  137.     case36: 
  138.      if($linshi>=10) 
  139.      { 
  140.      $zifu.=chr(($linshi+55)); 
  141.      }else
  142.       $zifu.=$linshi;} 
  143.      break
  144.     case62: 
  145.      if(($linshi>=10) && ($linshi36)) {$zifu.=chr($linshi+55);break;} 
  146.      if(($linshi>=36) && ($linshi62)) {$zifu.=chr($linshi+61);break;} 
  147.      $zifu.=$linshi;break
  148.    default
  149.    $zifu.=$linshi
  150.    break
  151.    } 
  152.    $shu=intval(bcdiv($shu,$jinzhi)); 
  153.    } 
  154.    for($i=strlen($zifu);$i$w;$i++) 
  155.    $zifu.="0"
  156.   returnstrrev($zifu);} 
  157.    //2、8、16、36、62进制高精度转换10进制 
  158.    functionjinzhih_G1($zifu,$jinzhi,$w
  159.  {$shu=""
  160.   for($i=0;$i=strlen($zifu)-1;$i++) 
  161.      { 
  162.      $linshi=substr($zifu,$i,1); 
  163.      switch($jinzhi){ 
  164.       case2: 
  165.        $shu=bindec($zifu); 
  166.        $i=strlen($zifu)+1; 
  167.        break
  168.       case8: 
  169.        $shu= octdec($zifu); 
  170.       $i=strlen($zifu)+1; 
  171.       break
  172.       case16: 
  173.        $shu= hexdec($zifu); 
  174.        $i=strlen($zifu)+1; 
  175.        break
  176.      case36: 
  177.       if(ord($linshi)=57) 
  178.       {$shu=bcadd($shu,bcmul((ord($linshi)-48),bcpow($jinzhi,strlen($zifu)-$i-1))); 
  179.      }else
  180.        $shu=bcadd($shu,bcmul((ord($linshi)-55),bcpow($jinzhi,strlen($zifu)-$i-1)));} 
  181.        break
  182.      case62: 
  183.       if(ord($linshi)=57) 
  184.       {$shu=bcadd($shu,bcmul($linshi,bcpow($jinzhi,strlen($zifu)-$i-1))); 
  185.      }elseif((ord($linshi)>=65) && (ord($linshi)=90)){ 
  186.       $shu=bcadd($shu,bcmul((ord($linshi)-55),bcpow($jinzhi,strlen($zifu)-$i-1))); 
  187.       }else
  188.       $shu=bcadd($shu,bcmul((ord($linshi)-61),bcpow($jinzhi,strlen($zifu)-$i-1))); 
  189.       } 
  190.       break
  191.      } 
  192.    } 
  193.    return$shu;} 
  194. if(isset($_GET["p"])) 
  195. {if($_GET["p"]==="1"){ 
  196. echo""
  197. echo"提示: 
  198. "; 
  199. echo"32进制低精转换,最大值:2147483646 
  200. "; 
  201. echo"32进制高精转换,最大值:77309411327 
  202. "; 
  203. echo"64进制高精转换,最大值:133143986175 
  204. "; 
  205. echo""
  206. echo"值为:"
  207. $Fs=newjinzhi_class(); 
  208. if($_POST['lx']=="0"&&$_POST['jinzhi0']=="10"
  209. {echo$Fs->jinzhih_0($_POST['zhi'],$_POST['jinzhi1'],$_POST['changdu'])." 
  210. ";} 
  211. if($_POST['lx']=="1"&&$_POST['jinzhi0']=="10"
  212. {echo$Fs->jinzhih_G0($_POST['zhi'],$_POST['jinzhi1'],$_POST['changdu']);} 
  213. if($_POST['lx']=="0"&&$_POST['jinzhi0']>"10"
  214. {echo$Fs->jinzhih_1($_POST['zhi'],$_POST['jinzhi0'],$_POST['changdu']);} 
  215. if($_POST['lx']=="1"&&$_POST['jinzhi0']>"10"
  216. {echo$Fs->jinzhih_G1($_POST['zhi'],$_POST['jinzhi0'],$_POST['changdu']);} 
  217. //phpfensi.com 
  218. echo"";} 
  219. $mtime1=explode(" ", microtime()); 
  220. $endTime=$mtime1[0] +$mtime1[1]; 
  221. printf ("页面执行时间:%.6fs.",$endTime-$startTime); 
  222. ?>

Tags: 进制 实例分析

分享到: