<?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));