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 09 PHP
php 数组的一个悲剧?
May 11 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
php与flash as3 socket通信传送文件实现代码
Aug 16 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
修复ShopNC使用QQ 互联时提示100010 错误
Nov 08 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
php 猴子摘桃的算法
Jun 20 PHP
thinkphp5框架API token身份验证功能示例
May 21 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 PHP
php获取小程序码的实现代码(B类接口)
Jun 13 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 header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
js实现3D旋转效果
2020/08/18 Javascript
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
简单的Python抓taobao图片爬虫
2014/10/26 Python
Python的迭代器和生成器使用实例
2015/01/14 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
香港交友网站:be2香港
2018/07/22 全球购物
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
咖啡店自主创业商业计划书
2014/01/22 职场文书
中文师范生自荐信
2014/01/30 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
师范生见习总结范文
2015/06/23 职场文书
JS数组方法some、every和find的使用详情
2021/10/05 Javascript
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB