php实现的任意进制互转类分享


Posted in PHP onJuly 07, 2015

之前不知道php自带有base_convert可以实现任意进制之间的转换,自己写了一个。。。。

<?php 
/**
 * 进制转换类 
 * @author sgf@funcity
 * @version 2011-02-15
 */
Class Hex{
 
 private static $element = array(
 '0','1','2','3','4','5','6','7','8','9',
 'A','B','C','D','E','F','G','H','I','J',
 'K','L','M','N','O','P','Q','R','S','T',
 'U','V','W','X','Y','Z'
 );
 
 private static $hex_min = 2;
 private static $hex_max = 36;
 
 
 /**
 * 进制转换
 */
 public function conv($int,$out_hex,$in_hex=10,$use_system=true){
 
 if($use_system && function_exists('base_convert')){
  return strtoupper(base_convert($int,$in_hex,$out_hex));
 }
 
 if($out_hex == $in_hex){
  return $int;
 }
 if($out_hex > self::$hex_max || $out_hex < self::$hex_min){
  return false;
 }
 if($in_hex > self::$hex_max || $in_hex < self::$hex_min){
  return false;
 }
 $hex_10 = $this->_conv2hex10($int,$in_hex);
 return strtoupper($this->_conv_hex($hex_10,$out_hex));
 }
 
 /**
 * 将任意进制数字转为10进制数字
 */
 private function _conv2hex10($int,$in_hex){
 $int = strtoupper(trim($int));
 if($in_hex==10){
  return $int;
 }elseif( $in_hex== 2 && function_exists('bindec')){
  return bindec($int);
 } elseif($in_hex== 16 && function_exists('hexdec')){
  return hexdec($int);
 } elseif($in_hex== 8 && function_exists('octdec')){
  return octdec($int);
 }
 $array = array();
 $result = 0;
 for($i=0;$i<strlen($int);$i++){
  array_unshift( $array, substr($int,$i,1)); //插入到数组头部(既倒序)
 }
 foreach($array as $k => $v){
 
  $hex10_value = array_search($v,self::$element);
  if($hex10_value==-1){
  return false;
  }
  $result += intval( pow($in_hex,$k) * $hex10_value );
 
 }
 return $result;
 }
 
 /**
 * 把10进制数换成任意进制数
 */
 private function _conv_hex($hex_10,$out_hex){
 
 $hex_10 = intval($hex_10);
 
 if($out_hex==10){
  return $hex_10;
 }else if( $out_hex==2  && function_exists('decbin')){
  return decbin($hex_10);
 } elseif ( $out_hex ==16 && function_exists('dechex')){
  return dechex($hex_10);
 } elseif ( $out_hex ==8 && function_exists('decoct')){
  return decoct($hex_10);
 }
 
 $array = array();
 $result = ""; 
 
 //利用10进制数除任意进制数 倒取余数法转换。
 do {
  array_unshift( $array, $hex_10 % $out_hex); //余数插入到数组数组第1个位置。
  $hex_10 = $hex_10 / $out_hex ; //除法
 } while ($hex_10>1);
 
 foreach($array as $k){
  $result .= self::$element[$k]; 
 }
 return $result; 
 }
 
 
}
?>
PHP 相关文章推荐
phpmyadmin操作流程
Oct 09 PHP
在数据量大(超过10万)的情况下
Jan 15 PHP
一段php加密解密的代码
Jul 16 PHP
php5中类的学习
Mar 28 PHP
php strstr查找字符串中是否包含某些字符的查找函数
Jun 03 PHP
php分页代码学习示例分享
Feb 20 PHP
ThinkPHP3.1新特性之字段合法性检测详解
Jun 19 PHP
如何使用纯PHP实现定时器任务(Timer)
Jul 31 PHP
PHP实现图片的等比缩放和Logo水印功能示例
May 04 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
PHP解析url并得到url参数方法总结
Oct 11 PHP
Apache服务器下防止图片盗链的办法
Jul 06 #PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
Jul 06 #PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
Jul 06 #PHP
jquery+php实现导出datatables插件数据到excel的方法
Jul 06 #PHP
php导出中文内容excel文件类实例
Jul 06 #PHP
PHP伪造来源HTTP_REFERER的方法实例详解
Jul 06 #PHP
PHP 错误处理机制
Jul 06 #PHP
You might like
《魔兽争霸3:重制版》翻车了?你想要的我们都没有
2019/11/07 魔兽争霸
NT IIS下用ODBC连接数据库
2006/10/09 PHP
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
python通过socket查询whois的方法
2015/07/18 Python
详解python中asyncio模块
2018/03/03 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
python中安装django模块的方法
2020/03/12 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
小学生考试获奖感言
2014/01/30 职场文书
服务承诺口号
2014/05/22 职场文书
订货会邀请函
2015/01/31 职场文书
小学大队长竞选稿
2015/11/20 职场文书
python基础之函数的定义和调用
2021/10/24 Python
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android