при условии, что у меня есть функция для ручного вычисления десятичного числа из двоичного числа
* до четырех символов (двоичный)
* при условии, что вы можете ввести только 0 и 1 символ
код ниже работает отлично
function bin_to_dec($bin) {
$bin = str_split($bin);
$bin = array_reverse($bin);
$i = 0;
$dec = 0;
foreach($bin as $values) {
$ans = $values * pow(2, $i);
$dec += $ans;
$i++;
}
return $dec;
}
$bin = 1010 //4
$bin = 1 //1
$bin = 0 //0
предполагая, что если вы не можете использовать функции strrev (), str_split (), array_reverse (), как бы вы конвертировали двоичные числа в десятичные вручную?
Ну, вы пробовали встроенный BinDec функция?
var_dump(bindec(1010)); // int(10)
var_dump(bindec(1)); // int(1)
var_dump(bindec(101010)); // int(45)
Остерегайтесь, однако, эта функция предназначена для использования со строками и может давать странные результаты для целых чисел, начинающихся с 0
:
var_dump(bindec(0101)); // int(0)
var_dump(bindec("0101")); // int(5)
http://php.net/manual/en/function.bindec.php
Example bindec() example
<?php
echo bindec('110011') . "\n";
echo bindec('000110011') . "\n";
echo bindec('111');
?>
The above example will output:
51
51
7
Попробуйте bindec()
функция.
$ret_val = bindec("10001101");
это один простой способ, в противном случае вы можете использовать …
<?php
function strev($y)
{
for ($x = strlen($y)-1; $x>=0; $x--) {
$y .= $y[$x];
$y[$x] = NULL;
}
return $y;
}
function bintodec($str){
$dec=0;
$nstr=$str;
$nstr=strev($nstr);
for($i=0;$i<strlen($str);$i++){
$val = ($nstr%pow(10,strlen($nstr)-1)) * pow(2, $i);
$dec += $val;
$nstr=floor($nstr/10);
}
return $dec;
}
echo bintodec("1111010");
?>