本文实例讲述了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文件,自带演示功能。
代码如下 | 复制代码 |
$mtime1=explode(" ", microtime()); $startTime=$mtime1[0] +$mtime1[1]; ?> 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); ?> |