php实现的任意进制互转类分享
之前不知道php自带有base_convert可以实现任意进制之间的转换,自己写了一个。。。。
<?php /** *进制转换类 *@authorsgf@funcity *@version2011-02-15 */ ClassHex{ privatestatic$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' ); privatestatic$hex_min=2; privatestatic$hex_max=36; /** *进制转换 */ publicfunctionconv($int,$out_hex,$in_hex=10,$use_system=true){ if($use_system&&function_exists('base_convert')){ returnstrtoupper(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){ returnfalse; } if($in_hex>self::$hex_max||$in_hex<self::$hex_min){ returnfalse; } $hex_10=$this->_conv2hex10($int,$in_hex); returnstrtoupper($this->_conv_hex($hex_10,$out_hex)); } /** *将任意进制数字转为10进制数字 */ privatefunction_conv2hex10($int,$in_hex){ $int=strtoupper(trim($int)); if($in_hex==10){ return$int; }elseif($in_hex==2&&function_exists('bindec')){ returnbindec($int); }elseif($in_hex==16&&function_exists('hexdec')){ returnhexdec($int); }elseif($in_hex==8&&function_exists('octdec')){ returnoctdec($int); } $array=array(); $result=0; for($i=0;$i<strlen($int);$i++){ array_unshift($array,substr($int,$i,1));//插入到数组头部(既倒序) } foreach($arrayas$k=>$v){ $hex10_value=array_search($v,self::$element); if($hex10_value==-1){ returnfalse; } $result+=intval(pow($in_hex,$k)*$hex10_value); } return$result; } /** *把10进制数换成任意进制数 */ privatefunction_conv_hex($hex_10,$out_hex){ $hex_10=intval($hex_10); if($out_hex==10){ return$hex_10; }elseif($out_hex==2&&function_exists('decbin')){ returndecbin($hex_10); }elseif($out_hex==16&&function_exists('dechex')){ returndechex($hex_10); }elseif($out_hex==8&&function_exists('decoct')){ returndecoct($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($arrayas$k){ $result.=self::$element[$k]; } return$result; } } ?>