首页 > 开发 > PHP > 正文

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

2024-05-04 22:01:04
字体:大 中 小
来源:转载
供稿:网友

本文实例讲述了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. { 
  49.    //10进制转2、8、16、36、62进制 
  50.    functionjinzhih_0($shu,$jinzhi,$w) 
  51.    { 
  52.    $zifu=""; 
  53.    while($shu!=0){ 
  54.    $linshi=$shu%$jinzhi; 
  55.    switch($jinzhi){ 
  56.     case2: 
  57.      $zifu=decbin($shu); 
  58.      return$zifu; 
  59.     case8: 
  60.      $zifu=decoct($shu); 
  61.      return$zifu; 
  62.     case16: 
  63.      $zifu=dechex($shu); 
  64.      return$zifu; 
  65.     case36: 
  66.      if($linshi>=10) 
  67.      { 
  68.      $zifu.=chr(($linshi+55)); 
  69.      }else{ 
  70.       $zifu.=$linshi;} 
  71.      break; 
  72.     case62: 
  73.      if(($linshi>=10) && ($linshi36)) {$zifu.=chr($linshi+55);break;} 
  74.      if(($linshi>=36) && ($linshi62)) {$zifu.=chr($linshi+61);break;} 
  75.      $zifu.=$linshi;break; 
  76.    default: 
  77.    $zifu.=$linshi; 
  78.    break; 
  79.    } 
  80.    $shu=intval($shu/$jinzhi); 
  81.    } 
  82.    for($i=strlen($zifu);$i$w;$i++) 
  83.    $zifu.="0"; 
  84.   returnstrrev($zifu);} 
  85.    //2、8、16、36、62进制转10进制 
  86.    functionjinzhih_1($zifu,$jinzhi,$w) 
  87.  {$shu=0; 
  88.   for($i=0;$i=strlen($zifu)-1;$i++) 
  89.      { 
  90.      $linshi=substr($zifu,$i,1); 
  91.      switch($jinzhi){ 
  92.       case2: 
  93.        $shu=bindec($zifu); 
  94.        $i=strlen($zifu)+1; 
  95.        break; 
  96.       case8: 
  97.        $shu= octdec($zifu); 
  98.       $i=strlen($zifu)+1; 
  99.       break; 
  100.       case16: 
  101.        $shu= hexdec($zifu); 
  102.        $i=strlen($zifu)+1; 
  103.        break; 
  104.      case36: 
  105.       if(ord($linshi)=57) 
  106.       {$shu+=(ord($linshi)-48)*pow($jinzhi,strlen($zifu)-$i-1); 
  107.      }else{ 
  108.        $shu=$shu+ (ord($linshi)-55)*pow($jinzhi,strlen($zifu)-$i-1);} 
  109.        break; 
  110.      case62: 
  111.       if(ord($linshi)=57) 
  112.       {$shu+=$linshi*pow($jinzhi,strlen($zifu)-$i-1);     
  113.      }elseif((ord($linshi)>=65) && (ord($linshi)=90)){ 
  114.       $shu+= (ord($linshi)-55)*pow($jinzhi,strlen($zifu)-$i-1); 
  115.       }else{ 
  116.       $shu+= (ord($linshi)-61)*pow($jinzhi,strlen($zifu)-$i-1);} 
  117.       break; 
  118.      } 
  119.    } 
  120.    return$shu; 
  121.    } 
  122.    //10进制高精度转换2、8、16、36、62进制 
  123.    functionjinzhih_G0($shu,$jinzhi,$w) 
  124.    { 
  125.    $zifu=""; 
  126.    while($shu!=0){ 
  127.    $linshi=bcmod($shu,$jinzhi); 
  128.    switch($jinzhi){ 
  129.     case2: 
  130.      $zifu=decbin($shu); 
  131.      return$zifu; 
  132.     case8: 
  133.      $zifu=decoct($shu); 
  134.      return$zifu; 
  135.     case16: 
  136.      $zifu=dechex($shu); 
  137.      return$zifu; 
  138.     case36: 
  139.      if($linshi>=10) 
  140.      { 
  141.      $zifu.=chr(($linshi+55)); 
  142.      }else{ 
  143.       $zifu.=$linshi;} 
  144.      break; 
  145.     case62: 
  146.      if(($linshi>=10) && ($linshi36)) {$zifu.=chr($linshi+55);break;} 
  147.      if(($linshi>=36) && ($linshi62)) {$zifu.=chr($linshi+61);break;} 
  148.      $zifu.=$linshi;break; 
  149.    default: 
  150.    $zifu.=$linshi; 
  151.    break; 
  152.    } 
  153.    $shu=intval(bcdiv($shu,$jinzhi)); 
  154.    } 
  155.    for($i=strlen($zifu);$i$w;$i++) 
  156.    $zifu.="0"; 
  157.   returnstrrev($zifu);} 
  158.    //2、8、16、36、62进制高精度转换10进制 
  159.    functionjinzhih_G1($zifu,$jinzhi,$w) 
  160.  {$shu=""; 
  161.   for($i=0;$i=strlen($zifu)-1;$i++) 
  162.      { 
  163.      $linshi=substr($zifu,$i,1); 
  164.      switch($jinzhi){ 
  165.       case2: 
  166.        $shu=bindec($zifu); 
  167.        $i=strlen($zifu)+1; 
  168.        break; 
  169.       case8: 
  170.        $shu= octdec($zifu); 
  171.       $i=strlen($zifu)+1; 
  172.       break; 
  173.       case16: 
  174.        $shu= hexdec($zifu); 
  175.        $i=strlen($zifu)+1; 
  176.        break; 
  177.      case36: 
  178.       if(ord($linshi)=57) 
  179.       {$shu=bcadd($shu,bcmul((ord($linshi)-48),bcpow($jinzhi,strlen($zifu)-$i-1))); 
  180.      }else{ 
  181.        $shu=bcadd($shu,bcmul((ord($linshi)-55),bcpow($jinzhi,strlen($zifu)-$i-1)));} 
  182.        break; 
  183.      case62: 
  184.       if(ord($linshi)=57) 
  185.       {$shu=bcadd($shu,bcmul($linshi,bcpow($jinzhi,strlen($zifu)-$i-1))); 
  186.      }elseif((ord($linshi)>=65) && (ord($linshi)=90)){ 
  187.       $shu=bcadd($shu,bcmul((ord($linshi)-55),bcpow($jinzhi,strlen($zifu)-$i-1))); 
  188.       }else{ 
  189.       $shu=bcadd($shu,bcmul((ord($linshi)-61),bcpow($jinzhi,strlen($zifu)-$i-1))); 
  190.       } 
  191.       break; 
  192.      } 
  193.    } 
  194.    return$shu;} 
  195. } 
  196. if(isset($_GET["p"])) 
  197. {if($_GET["p"]==="1"){ 
  198. echo""; 
  199. echo"提示: 
  200. "; 
  201. echo"32进制低精转换,最大值:2147483646 
  202. "; 
  203. echo"32进制高精转换,最大值:77309411327 
  204. "; 
  205. echo"64进制高精转换,最大值:133143986175 
  206. "; 
  207. echo""; 
  208. echo"值为:"; 
  209. $Fs=newjinzhi_class(); 
  210. if($_POST['lx']=="0"&&$_POST['jinzhi0']=="10") 
  211. {echo$Fs->jinzhih_0($_POST['zhi'],$_POST['jinzhi1'],$_POST['changdu'])." 
  212. ";} 
  213. if($_POST['lx']=="1"&&$_POST['jinzhi0']=="10") 
  214. {echo$Fs->jinzhih_G0($_POST['zhi'],$_POST['jinzhi1'],$_POST['changdu']);} 
  215. if($_POST['lx']=="0"&&$_POST['jinzhi0']>"10") 
  216. {echo$Fs->jinzhih_1($_POST['zhi'],$_POST['jinzhi0'],$_POST['changdu']);} 
  217. if($_POST['lx']=="1"&&$_POST['jinzhi0']>"10") 
  218. {echo$Fs->jinzhih_G1($_POST['zhi'],$_POST['jinzhi0'],$_POST['changdu']);} 
  219. } //Vevb.com 
  220. echo"";} 
  221. $mtime1=explode(" ", microtime()); 
  222. $endTime=$mtime1[0] +$mtime1[1]; 
  223. printf ("页面执行时间:%.6fs.",$endTime-$startTime); 
  224. ?>

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表