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 float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
php跨站攻击实例分析
Oct 28 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
Oct 30 PHP
PHP实现的构造sql语句类实例
Feb 03 PHP
php实现的一段简单概率相关代码
May 30 PHP
php is_writable判断文件是否可写实例代码
Oct 13 PHP
PHP单例模式详解及实例代码
Dec 21 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 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
实现树状结构的两种方法
2006/10/09 PHP
php magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
jQuery插件开发基础简单介绍
2013/01/07 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
python中time包实例详解
2021/02/02 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
草莓网官网:StrawberryNET
2019/08/21 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
经贸日语专业个人求职信范文
2014/04/29 职场文书
单位未婚证明范本
2014/11/25 职场文书
写给女朋友的保证书
2015/05/09 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
原告代理词范文
2015/05/25 职场文书
爱国主义影片观后感
2015/06/18 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
Vue Element plus使用方法梳理
2022/12/24 Vue.js