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


Posted in PHP onFebruary 04, 2017

本文实例讲述了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);
?>
PHP 相关文章推荐
PHP完整的日历类(CLASS)
Nov 27 PHP
PHP注释实例技巧
Oct 03 PHP
php 一元分词算法
Nov 30 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
Jul 03 PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
ThinkPHP3.1基础知识快速入门
Jun 19 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
Jan 28 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
PHP7扩展开发教程之Hello World实现方法示例
Aug 03 PHP
PHP实现的函数重载功能示例
Aug 03 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 24 PHP
php7 图形用户界面GUI 开发示例
Feb 22 PHP
php加密之discuz内容经典加密方式实例详解
Feb 04 #PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
Feb 04 #PHP
PHP正则表达式匹配替换与分割功能实例浅析
Feb 04 #PHP
/etc/php-fpm.d/www.conf 配置注意事项
Feb 04 #PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
Feb 04 #PHP
Yii2实现多域名跨域同步登录退出
Feb 04 #PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 #PHP
You might like
PHP 缓存实现代码及详细注释
2010/05/16 PHP
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
2013/07/15 Javascript
js的alert弹出框出现乱码解决方案
2013/09/02 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
python和opencv实现抠图
2018/07/18 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
澳洲的服装老品牌:SABA
2018/02/06 全球购物
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
美国轮胎网站:Priority Tire
2018/11/28 全球购物
中华美德颂演讲稿
2014/05/20 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书