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 pcntl_fork和pcntl_fork 的用法
Apr 13 PHP
基于initPHP的框架介绍
Apr 18 PHP
解析htaccess伪静态的规则
Jun 18 PHP
使用Discuz关键词服务器实现PHP中文分词
Mar 11 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 PHP
浅谈PHP的数据库接口和技术
Dec 09 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
Apr 26 PHP
在Laravel5中正确设置文件权限的方法
May 22 PHP
laravel框架如何设置公共头和公共尾
Oct 22 PHP
常见的5个PHP编码小陋习以及优化实例讲解
Feb 27 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
Yii2中添加全局函数的方法分析
2017/05/04 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
jquery validate使用攻略 第四步
2010/07/01 Javascript
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
2016/04/01 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
Python自定义类的数组排序实现代码
2016/08/28 Python
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
Python的多维空数组赋值方法
2018/04/13 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
搞笑的获奖感言
2014/08/16 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
少年犯观后感
2015/06/11 职场文书
2015初中团委工作总结
2015/07/28 职场文书