当前位置:首页 > PHP教程 > php类库 > 列表

php实现的任意进制互转类分享

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-08 17:32:16 浏览: 评论:0 

这篇文章主要介绍了php实现的任意进制互转类分享,本文直接给出了实现代码,需要的朋友可以参考下。

之前不知道php自带有base_convert可以实现任意进制之间的转换,自己写了一个。。。。

  1. <?php  
  2. /** 
  3.  * 进制转换类  
  4.  * @author sgf@funcity 
  5.  * @version 2011-02-15 
  6.  */ 
  7. Class Hex{ 
  8.    
  9.  private static $element = array
  10.  '0','1','2','3','4','5','6','7','8','9'
  11.  'A','B','C','D','E','F','G','H','I','J'
  12.  'K','L','M','N','O','P','Q','R','S','T'
  13.  'U','V','W','X','Y','Z' 
  14.  ); 
  15.    
  16.  private static $hex_min = 2; 
  17.  private static $hex_max = 36; 
  18.    
  19.    
  20.  /** 
  21.  * 进制转换 
  22.  */ 
  23.  public function conv($int,$out_hex,$in_hex=10,$use_system=true){ 
  24.    
  25.  if($use_system && function_exists('base_convert')){ 
  26.   return strtoupper(base_convert($int,$in_hex,$out_hex)); 
  27.  } 
  28.    
  29.  if($out_hex == $in_hex){ 
  30.   return $int
  31.  } 
  32.  if($out_hex > self::$hex_max || $out_hex < self::$hex_min){ 
  33.   return false; 
  34.  } 
  35.  if($in_hex > self::$hex_max || $in_hex < self::$hex_min){ 
  36.   return false; 
  37.  } 
  38.  $hex_10 = $this->_conv2hex10($int,$in_hex); 
  39.  return strtoupper($this->_conv_hex($hex_10,$out_hex)); 
  40.  } 
  41.    
  42.  /** 
  43.  * 将任意进制数字转为10进制数字 
  44.  */ 
  45.  private function _conv2hex10($int,$in_hex){ 
  46.  $int = strtoupper(trim($int)); 
  47.  if($in_hex==10){ 
  48.   return $int
  49.  }elseif$in_hex== 2 && function_exists('bindec')){ 
  50.   return bindec($int); 
  51.  } elseif($in_hex== 16 && function_exists('hexdec')){ 
  52.   return hexdec($int); 
  53.  } elseif($in_hex== 8 && function_exists('octdec')){ 
  54.   return octdec($int); 
  55.  } 
  56.  $array = array(); 
  57.  $result = 0; 
  58.  for($i=0;$i<strlen($int);$i++){ 
  59.   array_unshift$arraysubstr($int,$i,1)); //插入到数组头部(既倒序) 
  60.  } 
  61.  foreach($array as $k => $v){ 
  62.    
  63.   $hex10_value = array_search($v,self::$element); 
  64.   if($hex10_value==-1){ 
  65.   return false; 
  66.   } 
  67.   $result += intval( pow($in_hex,$k) * $hex10_value ); 
  68.    
  69.  } 
  70.  return $result
  71.  } 
  72.    
  73.  /** 
  74.  * 把10进制数换成任意进制数 
  75.  */ 
  76.  private function _conv_hex($hex_10,$out_hex){ 
  77.    
  78.  $hex_10 = intval($hex_10); 
  79.    
  80.  if($out_hex==10){ 
  81.   return $hex_10
  82.  }else if$out_hex==2  && function_exists('decbin')){ 
  83.   return decbin($hex_10); 
  84.  } elseif ( $out_hex ==16 && function_exists('dechex')){ 
  85.   return dechex($hex_10); 
  86.  } elseif ( $out_hex ==8 && function_exists('decoct')){ 
  87.   return decoct($hex_10); 
  88.  } 
  89.    
  90.  $array = array(); 
  91.  $result = "";  
  92.    
  93.  //利用10进制数除任意进制数 倒取余数法转换。 
  94.  do { 
  95.   array_unshift$array$hex_10 % $out_hex); //余数插入到数组数组第1个位置。 
  96.   $hex_10 = $hex_10 / $out_hex ; //除法 
  97.  } while ($hex_10>1); 
  98.    
  99.  foreach($array as $k){ 
  100.   $result .= self::$element[$k];  
  101.  } 
  102.  return $result;  
  103.  } 
  104.    
  105.    
  106. ?>

Tags: php进制互转类

分享到: