2/8/16轉10進位制

wensongyu發表於2016-01-18
<?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)

 


相關文章