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横向重复区域显示二法
Sep 25 PHP
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
Oct 31 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
Jun 17 PHP
PHP实现邮件群发的源码
Jun 18 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
PHP生成自适应大小的缩略图类及使用方法分享
May 06 PHP
PHP上传文件时自动分配路径的方法
Jan 09 PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 PHP
php文件上传及下载附带显示文件及目录功能
Apr 27 PHP
php服务器的系统详解
Oct 12 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 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+memcache实现的网站在线人数统计代码
2014/07/04 PHP
详解PHP归并排序的实现
2016/10/18 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
详解js类型判断
2018/05/22 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
python自动zip压缩目录的方法
2015/06/28 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
python适合人工智能的理由和优势
2019/06/28 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
Python networkx包的实现
2020/02/14 Python
PHP面试题-$message和$$message的区别
2015/12/08 面试题
班级入场式解说词
2014/02/01 职场文书
员工晚婚的请假条
2014/02/08 职场文书
个人担保书格式范文
2014/05/12 职场文书
婚礼家长致辞
2015/07/27 职场文书
win10下go mod配置方式
2021/04/25 Golang
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python