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 30 PHP
php下保存远程图片到本地的办法
Aug 08 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
Nov 01 PHP
深入分析php之面向对象
May 15 PHP
php生成图形(Libchart)实例
Nov 06 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 PHP
php两种无限分类方法实例
Apr 21 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
php基于dom实现的图书xml格式数据示例
Feb 03 PHP
Yii2框架redis基本应用示例
Jul 13 PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 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
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
Javascript中replace()小结
2015/09/30 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
javascript基本语法
2016/05/31 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
基于jQuery实现弹幕APP
2017/02/10 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
微信小程序删除处理详解
2017/08/16 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
python 3.6.2 安装配置方法图文教程
2018/09/18 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
2019/07/19 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
python中if及if-else如何使用
2020/06/02 Python
应届生服务员求职信
2013/10/31 职场文书
小学开学寄语
2014/01/19 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
化验室岗位职责
2015/02/14 职场文书
八月迷情观后感
2015/06/11 职场文书
超级礼物观后感
2015/06/15 职场文书
python内置进制转换函数的操作
2021/06/02 Python