<?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)