PHP進制轉(zhuǎn)換實例分析(2,8,16,36,64進制至10進制相互轉(zhuǎn)換)
本文實例講述了PHP進制轉(zhuǎn)換。分享給大家供大家參考,具體如下:
可以實現(xiàn):
10進制轉(zhuǎn)換2、8、16、36、62進制
2、8、16、36、62進制轉(zhuǎn)換10進制
有點要注意下,2、8、16進制轉(zhuǎn)換時,使用的是系統(tǒng)的自己的函數(shù)。
所以,不管怎么高精度轉(zhuǎn)換值可能大于2147483646。
另外,
32進制低精轉(zhuǎn)換,最大值:2147483646;
32進制高精轉(zhuǎn)換,最大值:77309411327;
64進制高精轉(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>進制轉(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>
進制</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>轉(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>進制,</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進制轉(zhuǎn)換為2、8、16、36、62進制;或反轉(zhuǎn)換。</p></form>
<?php
class jinzhi_class
{
//10進制轉(zhuǎn)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進制轉(zhuǎn)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進制高精度轉(zhuǎn)換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進制高精度轉(zhuǎn)換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進制低精轉(zhuǎn)換,最大值:2147483646
";
echo "32進制高精轉(zhuǎn)換,最大值:77309411327
";
echo "64進制高精轉(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 ("頁面執(zhí)行時間:%.6fs.",$endTime-$startTime);
?>
PS:這里再為大家推薦幾款計算與轉(zhuǎn)換工具供大家參考使用:
在線任意進制轉(zhuǎn)換工具:
http://tools.jb51.net/transcoding/hexconvert
科學(xué)計算器在線使用_高級計算器在線計算:
http://tools.jb51.net/jisuanqi/jsqkexue
在線計算器_標(biāo)準計算器:
http://tools.jb51.net/jisuanqi/jsq
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)學(xué)運算技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》、《PHP運算與運算符用法總結(jié)》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
- php進行ip地址掩碼運算處理的方法
- js驗證IP及子網(wǎng)掩碼的合法性有效性示例
- js針對ip地址、子網(wǎng)掩碼、網(wǎng)關(guān)的邏輯性判斷
- JS驗證IP,子網(wǎng)掩碼,網(wǎng)關(guān)和MAC的方法
- JavaScript在ASP頁面中實現(xiàn)掩碼文本框效果代碼
- PHP函數(shù)篇詳解十進制、二進制、八進制和十六進制轉(zhuǎn)換函數(shù)說明
- php 實現(xiàn)進制轉(zhuǎn)換(二進制、八進制、十六進制)互相轉(zhuǎn)換實現(xiàn)代碼
- PHP實現(xiàn)十進制、二進制、八進制和十六進制轉(zhuǎn)換相關(guān)函數(shù)用法分析
- php將字符串轉(zhuǎn)換成16進制的方法
- php和js實現(xiàn)根據(jù)子網(wǎng)掩碼和ip計算子網(wǎng)功能示例
相關(guān)文章
php中使用exec,system等函數(shù)調(diào)用系統(tǒng)命令的方法(不建議使用,可導(dǎo)致安全問題)
PHP作為一種服務(wù)器端的腳本語言,像編寫簡單,或者是復(fù)雜的動態(tài)網(wǎng)頁這樣的任務(wù),它完全能夠勝任。但事情不總是如此,有時為了實現(xiàn)某個功能,必須借助于操作系統(tǒng)的外部程序(或者稱之為命令),這樣可以做到事半功倍2012-09-09
jq的get傳參數(shù)在utf-8中亂碼問題的解決php版
在php下用jquery傳參出現(xiàn)亂碼的解決方法2008-07-07
php使用cookie顯示用戶上次訪問網(wǎng)站日期的方法
這篇文章主要介紹了php使用cookie顯示用戶上次訪問網(wǎng)站日期的方法,主要通過使用cookie保存訪問時間來實現(xiàn)該功能,需要的朋友可以參考下2015-01-01
php實現(xiàn)網(wǎng)頁上一頁下一頁翻頁過程詳解

