萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP進制轉換實例分析(2,8,16,36,64進制至10進制相互轉換)

PHP進制轉換實例分析(2,8,16,36,64進制至10進制相互轉換)

小編推薦的這篇文章介紹了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="">

<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> </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、8、16、36、62進制;或反轉換。</p></form>

<?php

classjinzhi_class

{

   //10進制轉2、8、16、36、62進制

   functionjinzhih_0($shu,$jinzhi,$w)

   {

   $zifu="";

   while($shu!=0){

   $linshi=$shu%$jinzhi;

   switch($jinzhi){

    case2:

     $zifu=decbin($shu);

     return$zifu;

    case8:

     $zifu=decoct($shu);

     return$zifu;

    case16:

     $zifu=dechex($shu);

     return$zifu;

    case36:

     if($linshi>=10)

     {

     $zifu.=chr(($linshi+55));

     }else{

      $zifu.=$linshi;}

     break;

    case62:

     if(($linshi>=10) && ($linshi36)) {$zifu.=chr($linshi+55);break;}

     if(($linshi>=36) && ($linshi62)) {$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";

  returnstrrev($zifu);}

   //2、8、16、36、62進制轉10進制

   functionjinzhih_1($zifu,$jinzhi,$w)

 {$shu=0;

  for($i=0;$i=strlen($zifu)-1;$i++)

     {

     $linshi=substr($zifu,$i,1);

     switch($jinzhi){

      case2:

       $shu=bindec($zifu);

       $i=strlen($zifu)+1;

       break;

      case8:

       $shu= octdec($zifu);

      $i=strlen($zifu)+1;

      break;

      case16:

       $shu= hexdec($zifu);

       $i=strlen($zifu)+1;

       break;

     case36:

      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;

     case62:

      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進制

   functionjinzhih_G0($shu,$jinzhi,$w)

   {

   $zifu="";

   while($shu!=0){

   $linshi=bcmod($shu,$jinzhi);

   switch($jinzhi){

    case2:

     $zifu=decbin($shu);

     return$zifu;

    case8:

     $zifu=decoct($shu);

     return$zifu;

    case16:

     $zifu=dechex($shu);

     return$zifu;

    case36:

     if($linshi>=10)

     {

     $zifu.=chr(($linshi+55));

     }else{

      $zifu.=$linshi;}

     break;

    case62:

     if(($linshi>=10) && ($linshi36)) {$zifu.=chr($linshi+55);break;}

     if(($linshi>=36) && ($linshi62)) {$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";

  returnstrrev($zifu);}

   //2、8、16、36、62進制高精度轉換10進制

   functionjinzhih_G1($zifu,$jinzhi,$w)

 {$shu="";

  for($i=0;$i=strlen($zifu)-1;$i++)

     {

     $linshi=substr($zifu,$i,1);

     switch($jinzhi){

      case2:

       $shu=bindec($zifu);

       $i=strlen($zifu)+1;

       break;

      case8:

       $shu= octdec($zifu);

      $i=strlen($zifu)+1;

      break;

      case16:

       $shu= hexdec($zifu);

       $i=strlen($zifu)+1;

       break;

     case36:

      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;

     case62:

      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"";

echo"提示:

";

echo"32進制低精轉換,最大值:2147483646

";

echo"32進制高精轉換,最大值:77309411327

";

echo"64進制高精轉換,最大值:133143986175

";

echo"";

echo"值為:";

$Fs=newjinzhi_class();

if($_POST['lx']=="0"&&$_POST['jinzhi0']=="10")

{echo$Fs->jinzhih_0($_POST['zhi'],$_POST['jinzhi1'],$_POST['changdu'])."

";}

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"";}

$mtime1=explode(" ", microtime());

$endTime=$mtime1[0] +$mtime1[1];

printf ("頁面執行時間:%.6fs.",$endTime-$startTime);

?>

copyright © 萬盛學電腦網 all rights reserved