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 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
Oct 29 PHP
PHP序列号生成函数和字符串替换函数代码
Jun 07 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
Nov 28 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
php准确计算复活节日期的方法
Apr 18 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
详解PHP防止直接访问.php 文件的实现方法
Jul 28 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
使用vs code编辑调试php配置的方法
Jan 29 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 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
解决element ui select下拉框不回显数据问题的解决
2019/02/20 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
自我评价200字分享
2013/12/17 职场文书
Python爬取某拍短视频
2021/06/11 Python
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技