<?php
/*
* 十进制转二进制、八进制、十六进制
* @params $data 将哪个十进制数转化, $decimal 转成哪个进制,$decimal=2/8/16
*/
function decimalT($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");
if(!in_array($decimal, $arr)){
return ;
}
$data = intval($data); //转化为整形
$remainder = 0;
$remainderStr = '';
$remainder = ($data%$decimal) == 0?0:$data%$decimal;
if($decimal == 16 && $remainder>=10){
$remainderStr .= $remainderArr[$remainder];
}else{
$remainderStr .= $remainder;
}
$temp = intval($data/$decimal);
while($temp != 0){
$remainder = ($temp%$decimal) == 0?0:($temp%$decimal);
if($decimal == 16 && $remainder>=10){
$remainderStr .= $remainderArr[$remainder];
}else{
$remainderStr .= $remainder;
}
$temp = intval($temp/$decimal);
}
$newArr = array_flip($arr);
return $newArr[$decimal].strrev($remainderStr);
}
var_dump(decimalT(10, 2)); //0b1010
var_dump(decimalT(7, 8)); //07
var_dump(decimalT(31, 16)); //0x1f