PHP
downloads | documentation | faq | getting help | mailing lists | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ceil> <base_convert
Last updated: Sun, 25 Nov 2007

view this page in

bindec

(PHP 4, PHP 5)

bindec — Binary to decimal

Popis

number bindec ( string $binary_string )

Returns the decimal equivalent of the binary number represented by the binary_string argument.

bindec() converts a binary number to an integer or, if needed for size reasons, float.

Parametre

binary_string

The binary string to convert

Vrátené hodnoty

The decimal value of binary_string

ChangeLog

Verzia Popis
Since 4.1.0 The function can now convert numbers that are too large to fit into the platforms integer type, larger values are returned as float in that case.

Príklady

Example#1 bindec() example

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

echo 
bindec('111');
?>

Výstup horeuvedeného príkladu bude:

51
51
7



ceil> <base_convert
Last updated: Sun, 25 Nov 2007
 
add a note add a note User Contributed Notes
bindec
flashpack at gmail dot com
16-Nov-2008 04:40
for converting fractions :
eg : 1001.1101

<?php
function BinaryToDecimal($binary){
 
$binary=trim($binary);
  if (
strstr($binary,'.')){
   
$split=explode('.',$binary);
   
$integer=$split[0];
   
$fraction=$split[1];

   
$digits=str_split($fraction);
   
$num=sizeof($digits);
    for (
$i=1; $i<=$num;$i++){
      if (
$digits[$i-1]>1){
        echo
'<script>alert("Enter Binary Digits Only {0,1}\n \n eg: 11001 or 11001.011");history.go(-1)</script> ';
      }
     
$exponent=pow(2,-$i);
     
$fraction_result+=$digits[$i-1]*$exponent;
    }

  }else{
   
$integer=$binary;
  }

 
$splits=str_split($integer);
 
$num=sizeof($splits)-1;
 
$i=$num;
  foreach(
$splits as $digits){
    if (
$digits>1){
      echo
'<script>alert("Enter Binary Digits Only {0,1}\n \n eg: 11001 or 11001.011");history.go(-1)</script> ';
    }
   
$exponent=pow(2,$i);
   
$integer_result+=$digits*$exponent;
   
$i--;
  }
  if(
$fraction_result){
   
$result=$integer_result+$fraction_result;
  }else {
   
$result=$integer_result;
  }
  return
$result ;
}
?>
mashematician at gmail dot com
13-Mar-2008 09:57
A binary to decimal conversion function that takes advantage of the BC library functions to return decimal values of arbitrary length.

Input type must be a string in order to work properly.

<?php

function binary_to_decimal($a) {
   
$bin_array = str_split($a);

   
$y=sizeof($bin_array)-1;
    for (
$x=0; $x<sizeof($bin_array)-1; $x++) {
        if (
$bin_array[$x] == 1) {
           
$bin_array[$x] = bcpow(2, $y);
        }
       
$y--;
    }
   
    for (
$z=0; $z<sizeof($bin_array); $z++) {
       
$result = bcadd($result, $bin_array[$z]);
    }
    echo
$result;
}

binary_to_decimal('11111');

?>
alan hogan dot com slash contact
09-Nov-2007 01:34
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 -
1 * bindec(twoscomp($bin));
    else return (int)
bindec($bin);
}
?>
26-Aug-2004 02:42
decbin('1001') is prefered as decbin(1001).

Because on larger bit string, it may cause problem :

decbin(100000000000000) return 3
else
decbin('100000000000000') return 16384
gwbdome at freenet dot de
19-Aug-2004 02:43
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));
 }
martin at punix dot de
29-May-2003 10:47
## 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)
juancri at tagnet dot org
30-Oct-2002 04:16
> The special reason 4 this is:
> (010) is an integer, left 0 is null, eg 010 = 10
> ('010') is a string, eg '010' = '010'

In binary, just like with decimals, the left 0's are nulls.

in Decimal:  010 = 10
in Binary:    010 = 10 too :o)

> echo decbin(bindec(010010010));
> returns 101000

010010010 is a octal number. It's eq. to 2101256 (decimal). decbin(bindec(010010010)) is 101000 because 010010010 = 2101256.

That's all =)
php at silisoftware dot com
28-Feb-2002 07:16
For converting larger-than-31-bit numbers:

<?php
function Bin2Dec($binstring) {
    for (
$i=0;$i<strlen($binstring);$i++) {
       
$decvalue += ((int) substr($binstring, strlen($binstring) - $i - 1, 1)) * pow(2, $i);
    }
    return
$decvalue;
}
?>
da_he4datthe-gurusdotde
16-Sep-2001 07:11
[Editor's Note:
Numeric values starting with 0 are interpreted as octal (base eight) values.  For example: 0101 is converts to 65
--zak@php.net]

i was quite confused while werking with those bindec()/decbin() functions..
while
echo decbin(bindec(1));
echo decbin(bindec(10));
echo decbin(bindec(101));
just worked like expected,
echo decbin(bindec(010));
returns just 0
and for any reason
echo decbin(bindec(010010010));
returns 101000

i dont think this is a bug (maybe theres some special reason 4 this?), but it took  a certain time till i noticed that
echo decbin(bindec("010010010"));
works fine ...

hope this helps ne1.

ceil> <base_convert
Last updated: Sun, 25 Nov 2007
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites