利用php怎么实现一个进制转换功能
发布时间:-12-14 16:29:23
来源:亿速云
阅读:69
作者:Leah
本篇文章为大家展示了利用php怎么实现一个进制转换功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
实现方法如下<?php
/**
*进制转换类
*@authorsgf@funcity
*@version-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
returnfalse;
}
if($in_hex>self::$hex_max||$in_hex
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
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;
}
}
?>
上述内容就是利用php怎么实现一个进制转换功能,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。