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实现从ftp服务器上下载文件树到本地电脑的程序
Feb 10 PHP
php.ini 配置文件的深入解析
Jun 17 PHP
php的memcache类分享(memcache队列)
Mar 26 PHP
php中socket的用法详解
Oct 24 PHP
php curl 上传文件代码实例
Apr 27 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
linux下为php添加iconv模块的方法
Feb 28 PHP
PHP命令空间namespace及use的用法小结
Nov 27 PHP
PHP PDOStatement::execute讲解
Jan 31 PHP
php的命名空间与自动加载实现方法
Aug 25 PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 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
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
2019/04/10 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
python局域网ip扫描示例分享
2014/04/03 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
Python imread、newaxis用法详解
2019/11/04 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
python交互模式基础知识点学习
2020/06/18 Python
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
拉丁舞学习者的自我评价
2013/10/27 职场文书
太太口服液广告词
2014/03/20 职场文书
学校安全防火方案
2014/06/07 职场文书
民主评议党员工作总结
2014/10/20 职场文书
人事局接收函
2015/01/31 职场文书
感恩的心主题班会
2015/08/12 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript