php 二进制转十进制和十六进制

<?php

class stack{

	public $data;
	public $top;
}


function push($head,$value){
	if($head->top == 20){
		return false;
	}
	$head->top++;
	$head->data[$head->top] = $value;
	
	return $head;
}

function pop($head){
	if($head->top == 0){
		return false;
	}

	$e = $head->data[$head->top];
	$head->top--;
	return $e;
}

function init($arr,$len){
	$head = new stack();

	for($i=0;$i<$len;$i++){
		push($head,$arr[$i]);
	}
	return $head;
}


function two_to_ten($head,$len){

	$sum = 0;
	for($j=0;$j<$len;$j++){
		$sum += pop($head)*pow(2,$j);
	}
	return $sum;
}


function two_to_sixteen($head,$len){

	
	$a = array(
		10=>'a',
		11=>'b',
		12=>'c',
		13=>'d',
		14=>'e',
		15=>'f',
		16=>'g',
	);

	$s = new stack();
	for($j=0;$j<$len/4;$j++){
		$tmp = 0;
		$t=4;
		for($k=0;$k<$t;$k++){
			$tmp += pop($head)*pow(2,$k);
		}
		$sum= empty($a[$tmp])?$tmp:$a[$tmp];
		push($s,$sum);
	}
	$str = '';
	while($sss = pop($s)){
		$str .= $sss;
	}
	return $str;
}





// 11001001
$str = "1 1 0 0 1 0 0 1";
$arr = explode(" ",$str);
$len = count($arr);

$head = init($arr,$len);

print_r(two_to_sixteen($head,$len));


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值