bindec

(PHP 4, PHP 5)

bindecДвоичное в десятичное

Описание

number bindec ( string $binary_string )

Возвращает десятичный эквивалент двоичного числа binary_string.

bindec() преобразует двоичное число в integer или, если необходимо по причинам размера, в float.

bindec() интерпетирует значения binary_string как беззнаковое число. Так как bindec() воспринимает старший бит как еще один порядок величины, а не знаковый бит.

Список параметров

binary_string

Бинарная строка для преобразования

Внимание

Параметр должен быть строкой. Использование иных типов данных приведет к непредсказуемому результату.

Возвращаемые значения

Десятичное значение binary_string

Список изменений

Версия Описание
4.1.0 Теперь функция может преобразовывать числа, слишком большие для того, чтобы вместиться в тип integer, ограниченный платформой. В этом случае большие значения возвращаются как тип float.

Примеры

Пример #1 Пример использования bindec()

<?php
echo bindec('110011') . "\n";
echo 
bindec('000110011') . "\n";

echo 
bindec('111');
?>

Результат выполнения данного примера:

51
51
7

Пример #2 Пример. bindec() интерпретирует ввод как беззнаковое число

<?php
/*
 * Смысл этого примера можно найти в выводе скрипта,
 * а не в коде PHP.
 */

$magnitude_lower pow(2, (PHP_INT_SIZE 8) - 2);
p($magnitude_lower 1);
p($magnitude_lower'Видите резкую смену значений? Смотрите в следующий раз...');

p(PHP_INT_MAX'PHP_INT_MAX');
p(~PHP_INT_MAX'интерпретируется как увеличенное на единицу значение PHP_INT_MAX');

if (
PHP_INT_SIZE == 4) {
    
$note 'интерпретируется как самое большое целое без знака (unsigned integer)';
} else {
    
$note 'интерпретируется как самое большое целое без знака (unsigned integer)
              (18446744073709551615), но искажается из-за недостаточной точности float'
;
}
p(-1$note);


function 
p($input$note '') {
    echo 
"input:        $input\n";

    
$format '%0' . (PHP_INT_SIZE 8) . 'b';
    
$bin sprintf($format$input);
    echo 
"binary:       $bin\n";

    
ini_set('precision'20);  // Для надежности на 64-битных системах.
    
$dec bindec($bin);
    echo 
'bindec():     ' $dec "\n";

    if (
$note) {
        echo 
"NOTE:         $note\n";
    }

    echo 
"\n";
}
?>

Результат выполнения данного примера на 32-битных машинах:

input:        1073741823
binary:       00111111111111111111111111111111
bindec():     1073741823

input:        1073741824
binary:       01000000000000000000000000000000
bindec():     1073741824
NOTE:         Видите резкую смену значений? Смотрите в следующий раз...

input:        2147483647
binary:       01111111111111111111111111111111
bindec():     2147483647
NOTE:         PHP_INT_MAX

input:        -2147483648
binary:       10000000000000000000000000000000
bindec():     2147483648
NOTE:         интерпретируется как увеличенное на единицу значение PHP_INT_MAX

input:        -1
binary:       11111111111111111111111111111111
bindec():     4294967295
NOTE:         интерпретируется как самое большое целое без знака (unsigned integer)

Результат выполнения данного примера на 64-битных машинах:

input:        4611686018427387903
binary:       0011111111111111111111111111111111111111111111111111111111111111
bindec():     4611686018427387903

input:        4611686018427387904
binary:       0100000000000000000000000000000000000000000000000000000000000000
bindec():     4611686018427387904
NOTE:         Видите резкую смену значений? Смотрите в следующий раз...

input:        9223372036854775807
binary:       0111111111111111111111111111111111111111111111111111111111111111
bindec():     9223372036854775807
NOTE:         PHP_INT_MAX

input:        -9223372036854775808
binary:       1000000000000000000000000000000000000000000000000000000000000000
bindec():     9223372036854775808
NOTE:         интерпретируется как увеличенное на единицу значение PHP_INT_MAX

input:        -1
binary:       1111111111111111111111111111111111111111111111111111111111111111
bindec():     18446744073709551616
NOTE:         интерпретируется как самое большое целое без знака (unsigned integer)
              (18446744073709551615), но искажается из-за недостаточной точности float

Смотрите также

  • decbin() - Переводит число из десятичной системы счисления в двоичную
  • octdec() - Переводит число из восьмеричной системы счисления в десятичную
  • hexdec() - Переводит число из шестнадцатиричной системы счисления в десятичную
  • base_convert() - Преобразование числа между произвольными системами счисления

Коментарии

## calculate binary with "shift-method" ##

<?php
function dec2bin($decimal_code){
 for(
$half=($decimal_code);$half>=1;$half=(floor($half))/2){
   if((
$half%2)!=0){
   
$y.=1;
   }
   else{
   
$y.=0;
   }
  }
 
$calculated_bin=strrev($y);
 return 
$calculated_bin;
}
?>

## example ##

[bin] 123 = [dec] 1111011

e.g.
123/2 = 61,5 => 1
61/2  = 30,5 => 1
30/2  = 15   => 0
15/2  = 7,5  => 1
7/2   = 3,5  => 1
3/2   = 1,5  => 1
1/2   = 0,5  => 1
(0/2   = 0    finish)
2003-05-30 01:47:23
http://php5.kiev.ua/manual/ru/function.bindec.html
i think a better method than the "shift-method" is my method ^^...
here it comes:

function convert2bin($string) {
     $finished=0;
     $base=1;
     if(preg_match("/[^0-9]/", $string)) {
         for($i=0; $string!=chr($i); $i++);
         $dec_nr=$i;
     }
     else $dec_nr=$string;
     while($dec_nr>$base) {
         $base=$base*2;
         if($base>$dec_nr) {
             $base=$base/2;
             break;
         }
     }
     while(!$finished) {
         if(($dec_nr-$base)>0) {
             $dec_nr=$dec_nr-$base;
             $bin_nr.=1;
             $base=$base/2;
         }
         elseif(($dec_nr-$base)<0) {
             $bin_nr.=0;
             $base=$base/2;
         }
         elseif(($dec_nr-$base)==0) {
             $bin_nr.=1;
             $finished=1;
             while($base>1) {   
                 $bin_nr.=0;
                 $base=$base/2;
             }
         }
     }
     return $bin_nr;
 }

=====================================================

if you want to reconvert it (from binary to string or integer) you can use this function: 

function reconvert($bin_nr) {
     $base=1;
     $dec_nr=0;
     $bin_nr=explode(",", preg_replace("/(.*),/", "$1", str_replace("1", "1,", str_replace("0", "0,", $bin_nr))));
     for($i=1; $i<count($bin_nr); $i++) $base=$base*2;
     foreach($bin_nr as $key=>$bin_nr_bit) {
         if($bin_nr_bit==1) {
             $dec_nr+=$base;
             $base=$base/2;
         }
         if($bin_nr_bit==0) $base=$base/2;
     }
     return(array("string"=>chr($dec_nr), "int"=>$dec_nr));
 }
2004-08-19 17:43:03
http://php5.kiev.ua/manual/ru/function.bindec.html
The "smartbindec" function I wrote below will convert any binary string (of a reasonable size) to decimal.  It will use two's complement if the leftmost bit is 1, regardless of bit length.  If you are getting unexpected negative answers, try zero-padding your strings with sprintf("%032s", $yourBitString).

<?php
function twoscomp($bin) {
   
$out "";
   
$mode "init";
    for(
$x strlen($bin)-1$x >= 0$x--) {
        if (
$mode != "init")
           
$out = ($bin[$x] == "0" "1" "0").$out;
        else {
            if(
$bin[$x] == "1") {
               
$out "1".$out;
               
$mode "invert";
            }
            else
               
$out "0".$out;
        }
    }
    return 
$out;
}
function 
smartbindec($bin) {
    if(
$bin[0] == 1)
        return -
bindec(twoscomp($bin));
    else return (int) 
bindec($bin);
}
?>
2007-11-09 03:34:14
http://php5.kiev.ua/manual/ru/function.bindec.html
Автор:
Binary to Decimal conversion using the BCMath extension..

<?php

function BCBin2Dec($Input='') {
 
$Output='0';
  if(
preg_match("/^[01]+$/",$Input)) {
    for(
$i=0;$i<strlen($Input);$i++)
     
$Output=BCAdd(BCMul($Output,'2'),$Input{$i});
  }
  return(
$Output);
}

?>

This will simply convert from Base-2 to Base-10 using BCMath (arbitrary precision calculation).

See also: my 'BCDec2Bin' function on the 'decbin' document.
Enjoy,
Nitrogen.
2009-07-21 10:27:39
http://php5.kiev.ua/manual/ru/function.bindec.html
Two functions to convert 16bit or 8bit binary to integer using two's complement. If input exceeds maximum bits, false is returned. Function is easily scalable to x bits by changing the hexadecimals.

<?php function _bin16dec($bin) {
   
// Function to convert 16bit binary numbers to integers using two's complement
   
$num bindec($bin);
    if(
$num 0xFFFF) { return false; }
    if(
$num >= 0x8000) {
        return -((
$num 0xFFFF)+1);
    } else {
        return 
$num;
    }
}

function 
_bin8dec($bin) {
   
// Function to convert 8bit binary numbers to integers using two's complement
   
$num bindec($bin);
    if(
$num 0xFF) { return false; }
    if(
$num >= 0x80) {
        return -((
$num 0xFF)+1);
    } else {
        return 
$num;
    }
?>
2010-04-01 07:40:51
http://php5.kiev.ua/manual/ru/function.bindec.html

    Поддержать сайт на родительском проекте КГБ