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 相关文章推荐
把从SQL中取出的数据转化成XMl格式
Oct 09 PHP
简单的页面缓冲技术
Oct 09 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
Jan 20 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 PHP
PHP Web木马扫描器代码分享
Sep 06 PHP
使用JavaScript创建新样式表和新样式规则
Jun 14 PHP
PHP基于面向对象实现的留言本功能实例
Apr 04 PHP
PHP __call()方法实现委托示例
May 20 PHP
Laravel使用Queue队列的技巧汇总
Sep 02 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
如何利用php+mysql保存和输出文件
2006/10/09 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
使用RxJS更优雅地进行定时请求详析
2019/06/02 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
Python生成随机验证码的两种方法
2015/12/22 Python
Win10下Python环境搭建与配置教程
2016/11/18 Python
Python元组常见操作示例
2019/02/19 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
旧时光糖果:Old Time Candy
2018/02/05 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
护理专业毕业生推荐信
2013/10/31 职场文书
银行工作检查书范文
2014/01/31 职场文书
给朋友的赠语
2015/06/23 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
python flask开发的简单基金查询工具
2021/06/02 Python