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 相关文章推荐
建立动态的WML站点(一)
Oct 09 PHP
php反弹shell实现代码
Apr 22 PHP
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
PHP number_format() 函数定义和用法
Jun 01 PHP
解析thinkphp import 文件内容变量失效的问题
Jun 20 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 PHP
php实现监控varnish缓存服务器的状态
Dec 30 PHP
php从字符串创建函数的方法
Mar 16 PHP
微信公众平台实现获取用户OpenID的方法
Apr 15 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 14 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
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
Python API len函数操作过程解析
2020/03/05 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
使用Python pip怎么升级pip
2020/08/11 Python
10个顶级Python实用库推荐
2021/03/04 Python
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
生产内勤岗位职责
2013/12/07 职场文书
学生会干部自荐信
2014/02/04 职场文书
员工入职担保书范文
2014/04/01 职场文书
大学活动总结模板
2014/07/10 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
奖学金个人总结
2015/03/04 职场文书
评职称个人总结
2015/03/05 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL