首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

十进制_八进制_二进制_变换 _转

2012-11-22 
十进制_八进制_二进制_转换_转/....?php?/*?*十进制转二进制、八进制、十六进制 不足位数前面补零?* @copyr

十进制_八进制_二进制_转换 _转

/....

<?php

?/*
?*十进制转二进制、八进制、十六进制 不足位数前面补零
?* @copyright http://www.cnblogs.com/chengmo
?*/
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);
??? if($bin==10)return $datalist; //相同进制忽略
??? $bytelen=ceil(16/$bin); //获得如果是$bin进制,一个字节的长度
??? $aOutChar=array();
??? foreach ($datalist as $num)
??? {
??????? $t="";
??????? $num=intval($num);
??? if($num===0)continue;
??????? while($num>0)
??????? {
??????????? $t=$arr[$num%$bin].$t;
??????????? $num=floor($num/$bin);
??????? }
??????? $tlen=strlen($t);
??????? if($tlen%$bytelen!=0)
??????? {
??????? $pad_len=$bytelen-$tlen%$bytelen;
??????? $t=str_pad("",$pad_len,"0",STR_PAD_LEFT).$t; //不足一个字节长度,自动前面补充0
??????? }
??????? $aOutChar[]=$t;
??? }
??? return $aOutChar;
}


/**
?*二进制、八进制、十六进制 转十进制*
?*
?* @param array $datalist 传入数据array(df,ef)
?* @param int $bin 转换的进制可以是:2,8,16
?* @return array 返回数据 array() 返回没有数据转换的格式
?* @copyright chengmo QQ:8292669
?*/
function bin_todec($datalist,$bin)
{
??? static $arr=array('0'=>0,'1'=>1,'2'=>2,'3'=>3,'4'=>4,'5'=>5,'6'=>6,'7'=>7,'8'=>8,'9'=>9,'A'=>10,'B'=>11,'C'=>12,'D'=>13,'E'=>14,'F'=>15);
??? if(!is_array($datalist))$datalist=array($datalist);
??? if($bin==10)return $datalist; //为10进制不转换
??? $aOutData=array(); //定义输出保存数组
??? foreach ($datalist as $num)
??? {
??? ??? //取出第一个数
??????? $atnum=str_split($num); //将字符串分割为单个字符数组
??? ??? //array(f,a)
??????? $atlen=count($atnum);//2
??????? $total=0;
??????? $i=1;
??????? foreach ($atnum as $tv)
??????? {
??????????? $tv=strtoupper($tv);
????????????
??????????? if(array_key_exists($tv,$arr))
??????????? {
??????????????? if($arr[$tv]==0)continue;
??????????????? $total=$total+$arr[$tv]*pow($bin,$atlen-$i);
??????????? }
??????????? $i++;
??????? }
??????? $aOutData[]=$total;
??? }
??? return $aOutData;
}
print_r( bin_todec(array(ff,fa),16));
?>

热点排行