Welcome 微信登录

首页 / 网页编程 / PHP / php实现的任意进制互转类分享

之前不知道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;}}?>