php教程

超轻量级php框架startmvc

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

更新时间:2020-03-17 16:11:44 作者:startmvc
本文实例讲述了PHP进制转换。分享给大家供大家参考,具体如下:可以实现:10进制转换2、

本文实例讲述了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
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) && ($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进制转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) && ($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进制高精度转换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 "";
echo "提示:
";
echo "32进制低精转换,最大值:2147483646
";
echo "32进制高精转换,最大值:77309411327
";
echo "64进制高精转换,最大值: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 ("页面执行时间:%.6fs.",$endTime-$startTime);
?>

PS:这里再为大家推荐几款计算与转换工具供大家参考使用:

在线任意进制转换工具: http://tools.jb51.net/transcoding/hexconvert

科学计算器在线使用_高级计算器在线计算: http://tools.jb51.net/jisuanqi/jsqkexue

在线计算器_标准计算器: http://tools.jb51.net/jisuanqi/jsq

PHP 进制 转换