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="<?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>&nbsp;</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[[email protected]]
* 创建日期: 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);
?>
时间: 2024-10-20 10:39:49

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

JS-011-颜色进制转换(RGB转16进制;16进制转RGB)

在网页开发的时候,经常需要进行颜色设置,因而经常需要遇到进行颜色进制转换的问题,例如:RGB转16进制:16进制转RGB),前几天在测试的时候,发现网站的颜色进制转换某类16进制颜色(例如:#000080,#FA08FA)转换时总是提示颜色非法,看了一下 js 源码,发现其进制转换的方法是错误的.找了一下度娘和谷大爷,最终写了一个颜色转换的小方法,源码如下所示: String.prototype.colorHex2Rgb = function(){ var reg = /^#([0-9a-fA-

任意进制转换算法

任意进制转换算法 N年没有写博客,发个进制转换的玩下,支持负数:功能属于简化版的 Convert.ToInt32 ,特点是: 1.任意位,如:0,1(二进制),0...7(八进制),0...9,A...F(16进制),0...N(N进制),或者是:[email protected]#$%^&*(8进制,字符符号),也可以是中文. 2.8 byte 最大长度. 3.C#源码. 最近写markdown格式习惯啦,cnblogs啥时候全改掉算了,别用这个htmleditor算了. 先说明下进制转换的基

Java进制转换

java进制转换java中进行二进制,八进制,十六进制,十进制间进行相互转换 十进制转成十六进制:Integer.toHexString(int i) 十进制转成八进制Integer.toOctalString(int i) 十进制转成二进制Integer.toBinaryString(int i) 十六进制转成十进制Integer.valueOf("FFFF",16).toString() 八进制转成十进制Integer.valueOf("876",8).toSt

JS中的进制转换以及作用

js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: //10进制转为16进制 (10).toString(16) // =>"a" //8进制转为16进制 (012).toString(16) // =>"a" //16进制转为10进制 (0x16).toString(10) // =>"22" //16进制转为8进制 (0x16).toString(8)

常用进制转换

原文:常用进制转换 最近的工作中,需要接触到一些硬件设备,处理这些设备的通讯,因此需要进行一些进制的转换.      其实,二进制.十六进制这些基本的知识,在我们刚学编程的时候,基础课应该已经讲过的了.但是,包括我自己在内,当时也仅仅是知道一般的换算规则,但是具体怎么应用,在c#中又是如何表示,也是近期才有比较深的体会.      具体的知识,各位就自己查看相关的基础知识了,这里我只给出自己在工作中的体会和实际的类库.      首先,先解释下C#的类型.一般,我们常用的有 byte.short

js 进制转换

js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: 运行下面代码 //10进制转为16进制 (10).toString(16) // =>"a" //8进制转为16进制 (012).toString(16) // =>"a" //16进制转为10进制 (0x16).toString(10) // =>"22" //16进制转为8进制 (0x16).toSt

(数字类型,进制转换,字符串,列表)介绍和操作

数字类型 整型 用途:记录年龄.等级.号码等 定义方式如 age = 18 本质 # age = int(18) 整型只能存一个值而且是不可变类型 int()方法能将字符串转为整型 需要注意的是使用int只能转纯数字的字符串,有小数点也不行 浮点型 用途:记录身高.体重.薪资等 定义方式如 height= 185.1 本质 # height= float(185.1) 浮点型只能存一个值而且是不可变类型 float()方法能将字符串和整型转为浮点型 需要注意的是使用float方法只能转纯数字的字

Python中进制转换函数的使用

Python中进制转换函数的使用 关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制).bin()(十进制转换到二进制).oct()(十进制转换到八进制).hex()(十进制转换到十六进制). 下面我们逐个说下每个函数的用法. bin bin()函数,是将十进制的数字转换成二进制的数字.其中bin()函数中传入的是十进制的数字,数据类型为数字类型. v = 18 num = bin(v) print(num)

夯实基础——P2084 进制转换

题目链接:https://www.luogu.org/problem/P2084 P2084 进制转换 题目背景 无 题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 : 1*2^4+0*2^3+1*2^2+0*2^1+1*2^0, 那么请你编程实现,将一个M进制的数N转换成十进制表示的式子. 注意:当系数为0时,该单项式要省略. 输入格式 两个数,M和N,中间用空格隔开. 输出格式 共一行,一个十进制表示的式子. 输入输出样例 输入 #1复制 2 1010

详细解释2进制,10进制,16进制,8进制,36进制

本篇介绍C/C++语言中的进制的概念,主要介绍2进制.10进制.16进制,这三种是编程时必须掌握的也是最常用的.另外,介绍8进制和36进制,其中 36进制在实际工程项目中会遇到. (本文选自<C/C++学习指南>,邵发,附录"2进制,10进制,16进制") 权利声明:作者拥有本书的全部权利.作者授权任何人都可以自由转载本网站发布的内容,但转载时必须遵守以下限制: ①转载时必须全文转载,不得有任何修改,必须包含"权利声明"和"官网地址"