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

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

以上是 PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换) 的全部内容, 来源链接: utcz.com/z/314183.html

回到顶部