PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
发布:smiling 来源: PHP粉丝网 添加日期:2018-07-26 17:50:00 浏览: 评论:0
本文实例讲述了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
- 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']);}
- } //phpfensi.com
- echo"";}
- $mtime1=explode(" ", microtime());
- $endTime=$mtime1[0] +$mtime1[1];
- printf ("页面执行时间:%.6fs.",$endTime-$startTime);
- ?>
Tags: 进制 实例分析
相关文章
- ·ip地址转换成十进制实现程序(2014-07-30)
- ·PHP二进制与字符串之间的相互转换函数(2015-12-10)
- ·php实现文件与16进制相互转换的方法示例(2018-08-02)
- ·php 实现进制相互转换(2019-10-04)
- ·PHP如何实现二进制搜索?(代码示例)(2020-01-29)
- ·PHP如何实现字符串16进制转换2进制?(2020-02-07)
- ·PHP如何将十进制转换为十六进制?(代码示例)(2020-02-15)
- ·【PHP学习】实现两个n位二进制整数相加(2020-04-05)
- ·php使用pack处理二进制文件的方法(2021-03-09)
- ·php保存二进制原始数据为图片的程序代码(2021-04-16)
- ·php将字符串转换成16进制的方法(2021-05-16)
- ·php实现将任意进制数转换成10进制的方法(2021-05-22)
- ·php实现二进制和文本相互转换的方法(2021-05-22)
- ·PHP实现UTF8二进制及明文字符串的转化功能示例(2021-08-20)
- ·php实现统计二进制中1的个数算法示例(2021-08-31)
- ·PHP实现的各种进制相互转换功能小工具示例(2021-09-05)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)