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中无法导入sql文件的解决办法
Jan 08 PHP
PHP $_FILES函数详解
Mar 09 PHP
UCenter 批量添加用户的php代码
Jul 17 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
采用thinkphp自带方法生成静态html文件详解
Jun 13 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
php三元运算符知识汇总
Jul 02 PHP
PHP缓存工具XCache安装与使用方法详解
Apr 09 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 PHP
php获取手机端的号码以及ip地址实例代码
Sep 12 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
Oct 15 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
国内php原创论坛
2006/10/09 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
javascript 显示全局变量与隐式全局变量的区别
2017/02/09 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
Python操作列表之List.insert()方法的使用
2015/05/20 Python
Python中如何获取类属性的列表
2016/12/26 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
2018/04/10 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
十佳大学生村官事迹
2014/01/09 职场文书
酒店开业庆典主持词
2014/03/21 职场文书
党支部综合考察材料
2014/05/19 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
培训计划通知
2015/07/15 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers