您的位置:首页 > 其它

2/8/16 转10进制

2016-01-18 15:27 267 查看
<?php
/*
* 二进制、八进制、十六进制转十进制
* @params $data 将该二进制数转10进制 $decimal 指定传进来的是几进制的数
*/
function tDecimal($data, $decimal){
//如果为空直接返回
if(empty($data) && empty($decimal)){
return ;
}

$arr = array("0b"=>2,"0"=>8,"0x"=>16);
$remainderArr = array(10=>'a', 11=>'b', 12=>"c", 13=>'d', 14=>"e", 15=>"f");
$remainderArr_rev = array_flip($remainderArr);

if(!in_array($decimal, $arr)){
return ;
}

$newData = (string)$data;    //强制转化为字符串

$num = 0;
$len = strlen($newData);
for($i=0;$i<$len;$i++){
if($decimal == 16 && in_array($newData[$i], $remainderArr)){
$num += $remainderArr_rev[$newData[$i]]*pow($decimal,$len-$i-1);
}else{
$num += $newData[$i]*pow($decimal,$len-$i-1);
}
}

return $num;
}

var_dump(tDecimal("101", 2));    //int(5)
var_dump(tDecimal("07", 8));    //int(7)
var_dump(tDecimal("1f", 16));    //int(31)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: