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 相关文章推荐
我的论坛源代码(十)
Oct 09 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
PHP几个数学计算的内部函数学习整理
Aug 06 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
wamp安装后自定义配置的方法
Aug 23 PHP
smarty中js的调用方法示例
Oct 27 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 PHP
php中钩子(hook)的原理与简单应用demo示例
Sep 03 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
Oct 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
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
[01:35]2018完美盛典章节片——共竞
2018/12/17 DOTA
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
2017/04/14 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
python使用标准库根据进程名如何获取进程的pid详解
2017/10/31 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
小学生班会演讲稿
2014/01/09 职场文书
邀请函的格式
2015/01/30 职场文书
行政处罚告知书
2015/07/01 职场文书
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL