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 set_time_limit(0) 设置程序执行时间的函数
May 26 PHP
PHP实现的封装验证码类详解
Jun 18 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
Apr 15 PHP
php将一维数组转换为每3个连续值组成的二维数组
May 06 PHP
Thinkphp3.2.3分页使用实例解析
Jul 28 PHP
PHP入门教程之表单与验证实例详解
Sep 11 PHP
php实现背景图上添加圆形logo图标的方法
Nov 17 PHP
php实现的二分查找算法示例
Jun 20 PHP
php-beanstalkd消息队列类实例分享
Jul 19 PHP
php微信开发之关键词回复功能
Jun 13 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
Feb 28 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/09/04 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
PHP中文分词的简单实现代码分享
2011/07/17 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
PHP加密技术的简单实现
2016/09/04 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
js同源策略详解
2015/05/21 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
懒加载实现的分页&amp;&amp;网站footer自适应
2016/12/21 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
浅谈Django的缓存机制
2018/08/23 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
社区国庆节活动方案
2014/02/05 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python
Python实现猜拳与猜数字游戏的方法详解
2022/04/06 Python