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 相关文章推荐
怎样在UNIX系统下安装MySQL
Oct 09 PHP
针对初学PHP者的疑难问答(1)
Oct 09 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
Feb 11 PHP
php 全局变量范围分析
Aug 07 PHP
PHP初学者最感迷茫的问题小结
Mar 27 PHP
zf框架的registry(注册表)使用示例
Mar 13 PHP
PHP冒泡算法详解(递归实现)
Nov 10 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
PHP自定义函数格式化json数据示例
Sep 14 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
PHP parse_ini_file函数的应用与扩展操作示例
Jan 07 PHP
php和js实现根据子网掩码和ip计算子网功能示例
Nov 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
php将文本文件转换csv输出的方法
2014/12/31 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
python多线程方式执行多个bat代码
2016/06/07 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
Python利用Django如何写restful api接口详解
2018/06/08 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
python 去除二维数组/二维列表中的重复行方法
2019/01/23 Python
python实现微信防撤回神器
2019/04/29 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
Java语言程序设计测试题判断题部分
2013/01/06 面试题
开学寄语大全
2014/04/08 职场文书
企业文化理念标语
2014/06/10 职场文书
霸气队列口号
2014/06/18 职场文书
校庆标语集锦
2014/06/25 职场文书
委托证明书
2014/09/17 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技