从十进制向其它进制转换,用的是就用该数字不断除以要转换的进制数,读取余数。连接一起就可以了。 <?php /**
*十进制转二进制、八进制、十六进制 不足位数前面补零* *
* @param array $datalist 传入数据array(100,123,130) * @param int $bin 转换的进制可以是:2,8,16
* @return array 返回数据 array() 返回没有数据转换的格式 */
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(\//不足一个字节长度,自动前面补充0
}
$aOutChar[]=$t; }
return $aOutChar; }
测试:
var_dump(decto_bin(array(128,253),2)); var_dump(decto_bin(array(128,253),8)); var_dump(decto_bin(array(128,253),16));
X-Powered-By: PHP/5.2.0 Content-type: text/html array(2) {
[0]=>
string(8) \ [1]=>
string(8) \}
array(2) {
[0]=>
string(4) \ [1]=>
string(4) \}
array(2) {
[0]=> string(2) \ [1]=>
string(2) \}
二进制、八进制、十六进制转十进制
这个转换用乘法,如:1101 转十进制:1*2 +1*2 +0*2 +1*2