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 DOS攻击实现代码(附如何防范)
May 29 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
Jun 23 PHP
php 解压rar文件及zip文件的方法
May 05 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
php实现读取内存顺序号
Mar 29 PHP
php 的反射详解及示例代码
Aug 25 PHP
PHP中的use关键字及文件的加载详解
Nov 28 PHP
PHP使用标准库spl实现的观察者模式示例
Aug 04 PHP
php session_decode函数用法讲解
May 26 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 PHP
PHP实现简单登录界面
Oct 23 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 正则表达式常用函数
2014/08/17 PHP
PHP处理Json字符串解码返回NULL的解决方法
2014/09/01 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
php中__toString()方法用法示例
2016/12/07 PHP
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
canvas时钟效果
2017/02/16 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
node使用UEditor富文本编辑器的方法实例
2017/07/11 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
Python MySQLdb Linux下安装笔记
2015/05/09 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
python创建临时文件夹的方法
2015/07/06 Python
python打开windows应用程序的实例
2019/06/28 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
欧洲当代手工玻璃和瓷器的领先品牌:LSA International
2018/06/03 全球购物
JSF的标签库有哪些
2012/04/27 面试题
法制宣传标语
2014/06/23 职场文书
二审答辩状范文
2015/05/22 职场文书
Go语言实现Snowflake雪花算法
2021/06/08 Golang
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
详细介绍python操作RabbitMq
2022/04/12 Python