php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码


Posted in PHP onOctober 22, 2010

十进制转换为二进制、八进制、十六进制
从十进制向其它进制转换,用的是就用该数字不断除以要转换的进制数,读取余数。连接一起就可以了。

<?php 
/** 
*十进制转二进制、八进制、十六进制 不足位数前面补零* 
* 
* @param array $datalist 传入数据array(100,123,130) 
* @param int $bin 转换的进制可以是:2,8,16 
* @return array 返回数据 array() 返回没有数据转换的格式 
* @copyright chengmo QQ:8292669 
*/ 
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 面向对象 final类与final方法
May 05 PHP
openflashchart 2.0 简单案例php版
May 21 PHP
Mysql中分页查询的两个解决方法比较
May 02 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
微信公众平台接口开发入门示例
Dec 24 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
PHP概率计算函数汇总
Sep 13 PHP
又拍云异步上传实例教程详解
Apr 19 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
PHP进阶学习之反射基本概念与用法分析
Jun 18 PHP
PHP中遍历数组的三种常用方法实例分析
Jun 24 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
Oct 19 #PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
Oct 19 #PHP
php empty,isset,is_null判断比较(差异与异同)
Oct 19 #PHP
学习php笔记 字符串处理
Oct 19 #PHP
PHP 函数执行效率的小比较
Oct 17 #PHP
PHP类中Static方法效率测试代码
Oct 17 #PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 #PHP
You might like
基于PHP异步执行的常用方式详解
2013/06/03 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
深入学习js函数的隐式参数 arguments 和 this
2019/06/24 Javascript
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
简单介绍Python中的try和finally和with方法
2015/05/05 Python
在windows系统中实现python3安装lxml
2016/03/23 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
Python sorted排序方法如何实现
2020/03/31 Python
CSS3 边框效果
2019/11/04 HTML / CSS
Ajxa常见问题都有哪些
2014/03/26 面试题
庆元旦广播稿
2014/02/10 职场文书
质量承诺书范文
2014/03/27 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
作风转变年心得体会
2014/10/22 职场文书
端午节寄语2015
2015/03/23 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
网吧管理制度范本
2015/08/05 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python