php 实现进制相互转换


Posted in PHP onApril 07, 2016

从十进制向其它进制转换,用的是就用该数字不断除以要转换的进制数,读取余数。连接一起就可以了。

<?php 
/**
 *十进制转二进制、八进制、十六进制 不足位数前面补零*
 *
 * @param array $datalist 传入数据array(100,123,130)
 * @param int $bin 转换的进制可以是:2,8,16
 * @return array 返回数据 array() 返回没有数据转换的格式
 */
function decto_bin($datalist,$bin)
{
  static $arr=array(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F');
  if(!is_array($datalist)) $datalist=array($datalist);
  if($bin==10)return $datalist; //相同进制忽略
  $bytelen=ceil(16/$bin); //获得如果是$bin进制,一个字节的长度
  $aOutChar=array();
  foreach ($datalist as $num)
  {
    $t="";
    $num=intval($num);
  if($num===0)continue;
    while($num>0)
    {
      $t=$arr[$num%$bin].$t;
      $num=floor($num/$bin);
    }
    $tlen=strlen($t);
    if($tlen%$bytelen!=0)
    {
    $pad_len=$bytelen-$tlen%$bytelen;
    $t=str_pad("",$pad_len,"0",STR_PAD_LEFT).$t; //不足一个字节长度,自动前面补充0
    }
    $aOutChar[]=$t;
  }
  return $aOutChar;
}

测试:

var_dump(decto_bin(array(128,253),2));
var_dump(decto_bin(array(128,253),8));
var_dump(decto_bin(array(128,253),16));

X-Powered-By: PHP/5.2.0
Content-type: text/html

array(2) {
 [0]=>
 string(8) "10000000"
 [1]=>
 string(8) "11111101"
}
array(2) {
 [0]=>
 string(4) "0200"
 [1]=>
 string(4) "0375"
}
array(2) {
 [0]=>
 string(2) "80"
 [1]=>
 string(2) "FD"
}

二进制、八进制、十六进制转十进制

这个转换用乘法,如:1101 转十进制:1*2^3+1*2^2+0*2^1+1*2^0

代码:

<?php 
/**
 *二进制、八进制、十六进制 转十进制*
 *
 * @param array $datalist 传入数据array(df,ef)
 * @param int $bin 转换的进制可以是:2,8,16
 * @return array 返回数据 array() 返回没有数据转换的格式
 * @copyright chengmo QQ:8292669
 */
function bin_todec($datalist,$bin)
{
  static $arr=array('0'=>0,'1'=>1,'2'=>2,'3'=>3,'4'=>4,'5'=>5,'6'=>6,'7'=>7,'8'=>8,'9'=>9,'A'=>10,'B'=>11,'C'=>12,'D'=>13,'E'=>14,'F'=>15);
  if(!is_array($datalist))$datalist=array($datalist);
  if($bin==10)return $datalist; //为10进制不转换
  $aOutData=array(); //定义输出保存数组
  foreach ($datalist as $num)
  {
    $atnum=str_split($num); //将字符串分割为单个字符数组
    $atlen=count($atnum);
    $total=0;
    $i=1;
    foreach ($atnum as $tv)
    {
      $tv=strtoupper($tv);
       
      if(array_key_exists($tv,$arr))
      {
        if($arr[$tv]==0)continue;
        $total=$total+$arr[$tv]*pow($bin,$atlen-$i);
      }
      $i++;
    }
    $aOutData[]=$total;
  }
  return $aOutData;
}

测试:

var_dump(bin_todec(array('ff','ff33','cc33'),16));
var_dump(bin_todec(array('1101101','111101101'),2));
var_dump(bin_todec(array('1234123','12341'),8));

X-Powered-By: PHP/5.2.0
Content-type: text/html

array(3) {
 [0]=>
 int(255)
 [1]=>
 int(65331)
 [2]=>
 int(52275)
}
array(2) {
 [0]=>
 int(124)
 [1]=>
 int(508)
}
array(2) {
 [0]=>
 int(342099)
 [1]=>
 int(5345)
}

这些只是实现方式,其实不在乎php语言还是其它,实现思路都是一样的。php其实内置不少函数可以完成这些内容:

bindec(),decoct(),dechex() base_convert() decbin() 这里只是实现思路而已。呵呵!

PHP 相关文章推荐
编写自己的php扩展函数
Oct 09 PHP
php中计算时间差的几种方法
Dec 31 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
Jul 01 PHP
PHP中如何定义和使用常量
Feb 28 PHP
yii中widget的用法
Dec 03 PHP
推荐十款免费 WordPress 插件
Mar 24 PHP
最新制作ThinkPHP3.2.3完全开发手册
Nov 23 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
Dec 22 PHP
PHP通过引用传递参数用法分析
Dec 01 PHP
PHP实现活动人选抽奖功能
Apr 19 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 #PHP
php制作简单模版引擎
Apr 07 #PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 #PHP
非常有用的9个PHP代码片段
Apr 06 #PHP
10个对初学者非常有用的PHP技巧
Apr 06 #PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 #PHP
PHP实现的DES加密解密实例代码
Apr 06 #PHP
You might like
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
浅谈php命令行用法
2015/02/04 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
PHP文件操作实例总结
2016/09/27 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
Python构造函数及解构函数介绍
2015/02/26 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
python os.rename实例用法详解
2020/12/06 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
几道Web/Ajax的面试题
2016/11/05 面试题
车间操作工岗位职责
2013/12/19 职场文书
运动会入场解说词300字
2014/01/25 职场文书
最常使用的求职信
2014/05/25 职场文书
医学求职自荐信
2014/06/21 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
详解JAVA的控制语句
2021/11/11 Java/Android
vue实现移动端div拖动效果
2022/03/03 Vue.js
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL
详解Python+OpenCV绘制灰度直方图
2022/03/22 Python
Python Numpy库的超详细教程
2022/04/06 Python
Redis+AOP+自定义注解实现限流
2022/06/28 Redis