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 相关文章推荐
织梦模板标记简介
Mar 11 PHP
php下使用无限生命期Session的方法
Mar 16 PHP
windows下zendframework项目环境搭建(通过命令行配置)
Dec 06 PHP
解决File size limit exceeded 错误的方法
Jun 14 PHP
浅谈php扩展imagick
Jun 02 PHP
php中heredoc与nowdoc介绍
Dec 25 PHP
PHP Web木马扫描器代码分享
Sep 06 PHP
Apache无法自动跳转却显示目录的解决方法
Nov 30 PHP
php实现批量修改文件名称的方法
Jul 23 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
Feb 07 PHP
yii2的restful api路由实例详解
May 14 PHP
PHP sdk文档处理常用代码示例解析
Dec 09 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操作类
2016/06/29 PHP
php实现websocket实时消息推送
2018/03/30 PHP
对比分析json及XML
2014/11/28 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
详细介绍Python函数中的默认参数
2015/03/30 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
python 编码规范整理
2018/05/05 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
pandas使用之宽表变窄表的实现
2020/04/12 Python
Django设置Postgresql的操作
2020/05/14 Python
pycharm永久激活超详细教程
2020/10/29 Python
java字符串格式化输出实例讲解
2021/01/06 Python
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
普通大学毕业生自荐信范文
2014/02/23 职场文书
机房搬迁方案
2014/05/01 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
手把手教你用SpringBoot将文件打包成zip存放或导出
2021/06/11 Java/Android