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世纪万年历
Dec 06 PHP
解析php取整的几种方式
Jun 25 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
Smarty3配置及入门语法
Feb 22 PHP
浅谈PHP的反射API
Feb 26 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 PHP
PHP分页显示的方法分析【附PHP通用分页类】
May 10 PHP
PHP strripos函数用法总结
Feb 11 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
Feb 12 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 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入门学习笔记之一
2010/10/12 PHP
PHP数组交集的优化代码分析
2011/03/06 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
js闭包的用途详解
2014/11/09 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
浅谈node的事件机制
2017/10/09 Javascript
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
python输出带颜色字体实例方法
2019/09/01 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
文秘专业个人求职信
2013/12/22 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
后天观后感
2015/06/08 职场文书
领导离职感言
2015/08/03 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL