溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何在PHP項(xiàng)目中實(shí)現(xiàn)一個(gè)進(jìn)制轉(zhuǎn)換功能

發(fā)布時(shí)間:2021-02-24 15:28:34 來(lái)源:億速云 閱讀:150 作者:戴恩恩 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹了如何在PHP項(xiàng)目中實(shí)現(xiàn)一個(gè)進(jìn)制轉(zhuǎn)換功能,此處通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考價(jià)值,需要的朋友可以參考下:

php有什么用

php是一個(gè)嵌套的縮寫(xiě)名稱,指的是英文超級(jí)文本預(yù)處理語(yǔ)言(php:Hypertext Preprocessor)的縮寫(xiě),它的語(yǔ)法混合了C、Java、Perl以及php自創(chuàng)新的語(yǔ)法,主要用來(lái)做網(wǎng)站開(kāi)發(fā),許多小型網(wǎng)站都用php開(kāi)發(fā),因?yàn)閜hp是開(kāi)源的,從而使得php經(jīng)久不衰。

10進(jìn)制轉(zhuǎn)換2、8、16、36、62進(jìn)制

2、8、16、36、62進(jìn)制轉(zhuǎn)換10進(jìn)制

有點(diǎn)要注意下,2、8、16進(jìn)制轉(zhuǎn)換時(shí),使用的是系統(tǒng)的自己的函數(shù)。

所以,不管怎么高精度轉(zhuǎn)換值可能大于2147483646。

另外,

32進(jìn)制低精轉(zhuǎn)換,最大值:2147483646;
32進(jìn)制高精轉(zhuǎn)換,最大值:77309411327;
64進(jìn)制高精轉(zhuǎn)換,最大值: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>進(jìn)制轉(zhuǎn)換/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>
進(jìn)制</td>
 <td width="275"><input name="zhi" type="text" id="zhi" /></td>
 </tr>
 <tr>
  <td>進(jìn)行<input name="lx" type="radio" value="0" checked="checked" />
普通<input type="radio" name="lx" value="1" />高精</td><td> </td>
 </tr>
 <tr>
  <td>轉(zhuǎn)換為
  <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>進(jìn)制,</td><td>總長(zhǎng)度為
  <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>注意:僅能進(jìn)行10進(jìn)制轉(zhuǎn)換為2、8、16、36、62進(jìn)制;或反轉(zhuǎn)換。</p></form>
<?php
class jinzhi_class
{
   //10進(jìn)制轉(zhuǎn)2、8、16、36、62進(jìn)制
   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) && ($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";
  return strrev($zifu);}
   //2、8、16、36、62進(jìn)制轉(zhuǎn)10進(jìn)制
   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進(jìn)制高精度轉(zhuǎn)換2、8、16、36、62進(jìn)制
   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) && ($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";
  return strrev($zifu);}
   //2、8、16、36、62進(jìn)制高精度轉(zhuǎn)換10進(jìn)制
   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 "";
echo "提示:
";
echo "32進(jìn)制低精轉(zhuǎn)換,最大值:2147483646
";
echo "32進(jìn)制高精轉(zhuǎn)換,最大值:77309411327
";
echo "64進(jìn)制高精轉(zhuǎn)換,最大值:133143986175
";
echo "";
echo "值為:";
$Fs = new jinzhi_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 ("頁(yè)面執(zhí)行時(shí)間:%.6fs.",$endTime-$startTime);
?>

到此這篇關(guān)于如何在PHP項(xiàng)目中實(shí)現(xiàn)一個(gè)進(jìn)制轉(zhuǎn)換功能的文章就介紹到這了,更多相關(guān)如何在PHP項(xiàng)目中實(shí)現(xiàn)一個(gè)進(jìn)制轉(zhuǎn)換功能的內(nèi)容請(qǐng)搜索億速云以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持億速云!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI