php 实现进制相互转换

来源:互联网 发布:筒灯选择 知乎 编辑:程序博客网 时间:2024/05/18 11:50
<?php
//echo decbin(12);
/*function getval($n) {
   $str = 0;
   while($n!=0) {
     //var_dump('000');
     //exit;
     if($n%2!=1) {
       echo '999';
       echo $str;
       $str.=$n%2;
     }
     if($n%2==1)
     {
       echo '777';
       echo $str;
       $str.=$n%2;
     }
     return $str;
  }//while end
   //return $str;
}
$n = 13;
echo getval($n);
*/
function decto_bin($datalist,$bin)
{
  static $arr=array(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F');
  if(!is_array($datalist)) $datalist=array($datalist);
  //var_dump($datalist); //array(1) { [0]=> int(12) }
  if($bin==10) return $datalist; //相同进制忽略
  $bytelen=ceil(16/$bin); //获得如果是$bin进制,一个字节的长度
  //var_dump($bytelen); //float(8)
  $aOutChar=array();
  foreach ($datalist as $num)
  {
    $t="";
    $num=intval($num);
    //var_dump($num); //int(12)
    if($num===0) continue;
    while($num>0)
    {
      //var_dump($num);   //int(12)  float(6)  float(3)  float(1)  
      //var_dump($bin);   //int(2)   int(2)    int(2)    int(2)
      //var_dump($num%$bin); //int(0) int(0) int(1) int(1)
      //var_dump($arr[$num%$bin]); //int(0) int(0) int(1) int(1)
      $t=$arr[$num%$bin].$t;
      //var_dump($t);   //string(1) "0" string(2) "00" string(3) "100" string(4) "1100"
      $num=floor($num/$bin);
      //var_dump($num); //float(6) float(3) float(1) float(0)
    }
    //var_dump($t); //string(4) "1100"
    $tlen=strlen($t);
    //var_dump($tlen);          //int(4)
    //var_dump($tlen%$bytelen); //int(4)
    if($tlen%$bytelen!=0)
    {
    $pad_len=$bytelen-$tlen%$bytelen;
    //var_dump($pad_len); //float(4)
    $t=str_pad("",$pad_len,"0",STR_PAD_LEFT).$t; //不足一个字节长度,自动前面补充0
    }
    //var_dump($t); //string(8) "00001100"
    $aOutChar[]=$t;
  }//foreach end
  return $aOutChar;
}
//var_dump(decto_bin(array(12),2));  //array(1) { [0]=> string(8) "00001100" }
//var_dump(decto_bin(array(12),10)); //array(1) { [0]=> int(12) }
var_dump(decto_bin(array(12),2));
//var_dump(decto_bin(array(128,253),8));
//var_dump(decto_bin(array(128,253),16));
?>
原创粉丝点击