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 相关文章推荐
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 PHP
php在服务器执行exec命令失败的解决方法
Mar 03 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
php常用ODBC函数集(详细)
Jun 24 PHP
PHP+jquery+ajax实现即时聊天功能实例
Dec 23 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
PHP数组函数array_multisort()用法实例分析
Apr 02 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 PHP
centos7上编译安装php7以php-fpm方式连接apache
Nov 08 PHP
Laravel5.1 框架路由基础详解
Jan 04 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 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
ASP和PHP都是可以删除自身的
2007/04/09 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
jquery中EasyUI使用技巧小结
2015/02/10 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
简单实现js上传文件功能
2017/08/21 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
Python最基本的输入输出详解
2015/04/25 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
Python socket模块方法实现详解
2019/11/05 Python
python add_argument()用法解析
2020/01/29 Python
使用SQLAlchemy操作数据库表过程解析
2020/06/10 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
奥巴马就职演讲稿
2014/05/15 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
导游词之天津古文化街
2019/11/09 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
python中pandas对多列进行分组统计的实现
2021/06/18 Python
mysql中整数数据类型tinyint详解
2021/12/06 MySQL