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 相关文章推荐
基于mysql的bbs设计(三)
Oct 09 PHP
php自定义函数call_user_func和call_user_func_array详解
Jul 14 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
php版小黄鸡simsimi聊天机器人接口分享
Jan 26 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
基于PHP生成简单的验证码
Jun 01 PHP
Laravel 5.3 学习笔记之 配置
Aug 28 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
PHP simplexml_load_file()函数讲解
Feb 03 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 PHP
深入分析PHP设计模式
Jun 15 PHP
HTTP头隐藏PHP版本号实现过程解析
Dec 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
PHP容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
JavaScript全局函数使用简单说明
2011/03/11 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
图解javascript作用域链
2019/05/27 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
Python中的jquery PyQuery库使用小结
2014/05/13 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
深入理解Python中的super()方法
2017/11/20 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
python3 selenium自动化 frame表单嵌套的切换方法
2019/08/23 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
大一自我鉴定范文
2013/12/27 职场文书
大学生冰淇淋店商业计划书
2014/01/14 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android
SpringBoot整合Minio文件存储
2022/04/03 Java/Android
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python