您的位置:首页 > 编程语言 > PHP开发

PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]

2016-03-04 11:34 901 查看
自己写了一个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="<?php echo $_SERVER['PHP_SELF'].'?p=1';?>">
<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
/*
* ===========================================
* 项目: 进制转换
* 版本: 1.0
* 团队: 3Vshej
* 作者: 网游世界
* 功能: 10进制转换2、8、16、36、62进制
2、8、16、36、62进制转换10进制
* ===========================================
* Copyright (c) 2008
* 团队主页: http://www.3vshej.cn * 团队信箱: 3vshej+163.com[+=@]
* 创建日期: 2008-11-3
* 修改日期: 暂无
* 修改说明: ----
* 版权声明: 免费软件
* ===========================================
*/
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) && ($linshi<36)) {$zifu.= chr($linshi+55);break;}
if (($linshi>=36) && ($linshi<62)) {$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) && ($linshi<36)) {$zifu.= chr($linshi+55);break;}
if (($linshi>=36) && ($linshi<62)) {$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 "<p>";
echo "提示:<br>";
echo "32进制低精转换,最大值:2147483646<br>";
echo "32进制高精转换,最大值:77309411327<br>";
echo "64进制高精转换,最大值:133143986175<br>";
echo "</p>";

echo "值为:<font color=#ff0000><b>";
$Fs = new jinzhi_class();
if ($_POST['lx']=="0" && $_POST['jinzhi0']=="10")
{echo $Fs->jinzhih_0($_POST['zhi'],$_POST['jinzhi1'],$_POST['changdu'])."<br>";}

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 "</b></font>";}
$mtime1 = explode(" ", microtime());
$endTime = $mtime1[0] + $mtime1[1];
printf ("<br>页面执行时间:%.6fs.</body></html>",$endTime-$startTime);
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: