《PHP編程:PHP進(jìn)制轉(zhuǎn)換實例分析(2,8,16,36,64進(jìn)制至10進(jìn)制相互轉(zhuǎn)換)》要點:
本文介紹了PHP編程:PHP進(jìn)制轉(zhuǎn)換實例分析(2,8,16,36,64進(jìn)制至10進(jìn)制相互轉(zhuǎn)換),希望對您有用。如果有疑問,可以聯(lián)系我們。
PHP實戰(zhàn)本文實例講述了PHP進(jìn)制轉(zhuǎn)換.分享給大家供大家參考,具體如下:
PHP實戰(zhàn)可以實現(xiàn):
PHP實戰(zhàn)10進(jìn)制轉(zhuǎn)換2、8、16、36、62進(jìn)制
PHP實戰(zhàn)2、8、16、36、62進(jìn)制轉(zhuǎn)換10進(jìn)制
PHP實戰(zhàn)有點要注意下,2、8、16進(jìn)制轉(zhuǎn)換時,使用的是系統(tǒng)的自己的函數(shù).
PHP實戰(zhàn)所以,不管怎么高精度轉(zhuǎn)換值可能大于2147483646.
PHP實戰(zhàn)另外,
PHP實戰(zhàn)32進(jìn)制低精轉(zhuǎn)換,最大值:2147483646;
32進(jìn)制高精轉(zhuǎn)換,最大值:77309411327;
64進(jìn)制高精轉(zhuǎn)換,最大值:133143986175.
PHP實戰(zhàn)jinzhi.php文件,自帶演示功能.
PHP實戰(zhàn)
<?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>總長度為
<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 ("頁面執(zhí)行時間:%.6fs.",$endTime-$startTime);
?>
PHP實戰(zhàn)PS:這里再為大家推薦幾款計算與轉(zhuǎn)換工具供大家參考使用:
PHP實戰(zhàn)在線任意進(jìn)制轉(zhuǎn)換工具:
http://tools.jb51.net/transcoding/hexconvert
PHP實戰(zhàn)科學(xué)計算器在線使用_高級計算器在線計算:
http://tools.jb51.net/jisuanqi/jsqkexue
PHP實戰(zhàn)在線計算器_標(biāo)準(zhǔn)計算器:
http://tools.jb51.net/jisuanqi/jsq
PHP實戰(zhàn)更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》
PHP實戰(zhàn)希望本文所述對大家PHP程序設(shè)計有所幫助.
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/1884.html