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来自动调用不同服务器上的flash
Oct 09 PHP
php获取mysql数据库中的所有表名的代码
Apr 23 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
Mar 13 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
windows中为php安装mongodb与memcache
Jan 06 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
Sep 30 PHP
PHP的APC模块实现上传进度条
Oct 27 PHP
PHP中SSO Cookie登录分析和实现
Nov 06 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
Oct 17 PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
php定义参数数量可变的函数用法实例
2015/03/16 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
js操作浏览器的参数方法
2017/01/21 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
Python使用MONGODB入门实例
2015/05/11 Python
Python中的数学运算操作符使用进阶
2016/06/20 Python
利用python画出折线图
2018/07/26 Python
djang常用查询SQL语句的使用代码
2019/02/15 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
Pytorch训练过程出现nan的解决方式
2020/01/02 Python
Python调用JavaScript代码的方法
2020/10/27 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
银行演讲稿范文
2014/01/03 职场文书
家教广告词
2014/03/19 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
赔偿协议书范本
2014/09/12 职场文书
计划生育工作汇报
2014/10/28 职场文书
幼儿园开学通知
2015/04/24 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书