<?php
class MyClass{
function bin2dec($bin)
{
$length = count($bin) - 1; $sum = 0;
//convert using doubling
for($i = 0; $i < $length; $i++)
{
//use string_add if doubling bigger than int32
if($i >= 16)
{
$double = $this->string_add("$sum", "$sum");
$cr = $bin[$i];
if($cr == 0)
{
$sum = $this->string_add($sum, $double);
}
else{
return $i;
$add = $this->string_add($double, "$cr");
$sum = $this->string_add($sum, $add);
}
}
else{
$sum += ($sum * 2) + $bin[$i];
}
}
return $sum;
}
function string_add($a, $b)
{
if($lena == $lenb)
{
$len = $lena - 1;//any
}
else if($lena > $lenb)
{
$b = str_pad($b, $lena, "0", STR_PAD_LEFT
); $len = $lena - 1;
}
else if($lenb > $lena){
$a = str_pad($a, $lenb, "0", STR_PAD_RIGHT
); $len = $lenb - 1;
}
$result = "";
for ($i = $len, $carry = 0; $i >= 0 || $carry != 0; $i--)
{
$add1 = $i < 0 ? 0 : $a[$i];
$add2 = $i < 0 ? 0 : $b[$i];
$add = $add1 + $add2 + $carry;
if ($add > 9) {
$carry = 1;
$add -= 10;
}
else {
$carry = 0;
}
$result .= $add;
}
}
}
$man = new MyClass();
$dec = $man->bin2dec($arr);
echo $dec;
PD9waHAKY2xhc3MgTXlDbGFzc3sKICAgIGZ1bmN0aW9uIGJpbjJkZWMoJGJpbikKICAgIHsKICAgICAgICAkbGVuZ3RoID0gY291bnQoJGJpbikgLSAxOwogICAgICAgICRzdW0gPSAwOwogICAgICAgIC8vY29udmVydCB1c2luZyBkb3VibGluZwogICAgICAgIGZvcigkaSA9IDA7ICRpIDwgJGxlbmd0aDsgJGkrKykKICAgICAgICB7CiAgICAgICAgICAgIC8vdXNlIHN0cmluZ19hZGQgaWYgZG91YmxpbmcgYmlnZ2VyIHRoYW4gaW50MzIKICAgICAgICAgICAgaWYoJGkgPj0gMTYpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRkb3VibGUgPSAkdGhpcy0+c3RyaW5nX2FkZCgiJHN1bSIsICIkc3VtIik7CiAgICAgICAgICAgICAgICAkY3IgPSAkYmluWyRpXTsKICAgICAgICAgICAgICAgIGlmKCRjciA9PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRzdW0gPSAkdGhpcy0+c3RyaW5nX2FkZCgkc3VtLCAkZG91YmxlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAJcmV0dXJuICRpOwogICAgICAgICAgICAgICAgICAgICRhZGQgPSAkdGhpcy0+c3RyaW5nX2FkZCgkZG91YmxlLCAiJGNyIik7CiAgICAgICAgICAgICAgICAgICAgJHN1bSA9ICR0aGlzLT5zdHJpbmdfYWRkKCRzdW0sICRhZGQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAkc3VtICs9ICgkc3VtICogMikgKyAkYmluWyRpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJHN1bTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gc3RyaW5nX2FkZCgkYSwgJGIpCiAgICB7CiAgICAgICAgJGxlbmEgPSBzdHJsZW4oJGEpOyAkbGVuYiA9IHN0cmxlbigkYik7CiAgICAgICAgaWYoJGxlbmEgPT0gJGxlbmIpCiAgICAgICAgewogICAgICAgICAgICAkbGVuID0gJGxlbmEgLSAxOy8vYW55CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoJGxlbmEgPiAkbGVuYikKICAgICAgICB7CiAgICAgICAgICAgICRiID0gc3RyX3BhZCgkYiwgJGxlbmEsICIwIiwgU1RSX1BBRF9MRUZUKTsKICAgICAgICAgICAgJGxlbiA9ICRsZW5hIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZigkbGVuYiA+ICRsZW5hKXsKICAgICAgICAgICAgJGEgPSBzdHJfcGFkKCRhLCAkbGVuYiwgIjAiLCBTVFJfUEFEX1JJR0hUKTsKICAgICAgICAgICAgJGxlbiA9ICRsZW5iIC0gMTsKICAgICAgICB9CiAgICAgICAgJHJlc3VsdCA9ICIiOwogICAgICAgIGZvciAoJGkgPSAkbGVuLCAkY2FycnkgPSAwOyAkaSA+PSAwIHx8ICRjYXJyeSAhPSAwOyAkaS0tKQogICAgICAgIHsKICAgICAgICAgICAgJGFkZDEgPSAkaSA8IDAgPyAwIDogJGFbJGldOwogICAgICAgICAgICAkYWRkMiA9ICRpIDwgMCA/IDAgOiAkYlskaV07CiAgICAgICAgICAgICRhZGQgPSAkYWRkMSArICRhZGQyICsgJGNhcnJ5OwogICAgICAgICAgICBpZiAoJGFkZCA+IDkpIHsKICAgICAgICAgICAgICAgICRjYXJyeSA9IDE7CiAgICAgICAgICAgICAgICAkYWRkIC09IDEwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGNhcnJ5ID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzdWx0IC49ICRhZGQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHJyZXYoJHJlc3VsdCk7CiAgICB9Cn0KCiRtYW4gPSBuZXcgTXlDbGFzcygpOwokYXJyID0gYXJyYXlfcGFkKGFycmF5KDEpLCA2MiwgMCk7CiRkZWMgPSAkbWFuLT5iaW4yZGVjKCRhcnIpOwplY2hvICRkZWM7