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函数
Oct 09 PHP
php MYSQL 数据备份类
Jun 19 PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
May 18 PHP
php 判断是否是中文/英文/数字示例代码
Sep 30 PHP
php实现获取及设置用户访问页面语言类
Sep 24 PHP
php文件类型MIME对照表(比较全)
Oct 07 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
Dec 02 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
php创建多级目录与级联删除文件的方法示例
Sep 12 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 11 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网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
php组合排序简单实现方法
2016/10/15 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
vue params、query传参使用详解
2017/09/12 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
python SVM 线性分类模型的实现
2019/07/19 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
numpy 声明空数组详解
2019/12/05 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
python实现简单文件读写函数
2021/02/25 Python
酒店值班经理的工作职责范本
2014/02/18 职场文书
暑期培训随笔感言
2014/03/10 职场文书
广告语设计及教案
2014/03/21 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
岗位说明书标准范本
2014/07/30 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
党支部意见范文
2015/06/02 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server