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 相关文章推荐
无限级别菜单的实现
Oct 09 PHP
PHP个人网站架设连环讲(二)
Oct 09 PHP
PHP 写文本日志实现代码
May 18 PHP
php获取文件内容最后一行示例
Jan 09 PHP
详谈PHP编码转换问题
Jul 28 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
php socket通信简单实现
Nov 18 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
PHP开发实现微信退款功能示例
Nov 25 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
PHP 中文处理技巧
2010/04/25 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
JS获取父节点方法
2009/08/20 Javascript
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
详解JavaScript函数
2015/12/01 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
2016/05/18 Javascript
angular实现图片懒加载实例代码
2017/06/08 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
JS实现吸顶特效
2020/01/08 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
[03:48]大碗DOTA
2019/07/25 DOTA
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
Python3使用tesserocr识别字母数字验证码的实现
2021/01/29 Python
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
金融专业个人的自我评价
2013/10/18 职场文书
项目经理的岗位职责
2013/11/23 职场文书
音乐专业自荐信
2014/02/07 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
教师节大会主持词
2015/07/06 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
总结高并发下Nginx性能如何优化
2021/11/01 Servers
python3 字符串str和bytes相互转换
2022/03/23 Python