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 相关文章推荐
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
Jun 01 PHP
根据ip调用新浪api获取城市名并转成拼音
Mar 07 PHP
小谈php正则提取图片地址
Mar 27 PHP
php匹配字符中链接地址的方法
Dec 22 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
PHP的邮件群发系统phplist配置方法详细总结
Mar 30 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
Aug 08 PHP
php 时间time与日期date之间的使用详解及区别
Nov 07 PHP
PHP和MYSQL实现分页导航思路详解
Apr 11 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 PHP
php实现JWT验证的实例教程
Nov 26 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
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
php管理nginx虚拟主机shell脚本实例
2014/11/19 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
javascript数组的使用
2013/03/28 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
python聊天程序实例代码分享
2013/11/18 Python
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
Python简单读取json文件功能示例
2017/11/30 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
优秀员工个人的自我评价
2013/11/29 职场文书
劳资协议书范本
2014/04/23 职场文书
实习评语大全
2014/04/26 职场文书
十佳青年事迹材料
2014/08/21 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript
Java对文件的读写操作方法
2022/04/29 Java/Android