GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Downloads
  • Documentation
  • Get Involved
  • Help
  • Getting Started
  • Introduction
  • A simple tutorial
  • Language Reference
  • Basic syntax
  • Types
  • Variables
  • Constants
  • Expressions
  • Operators

This view

  • Original page
  • New address

GeezerVison is showing www.php.net — PHP: bindec - Manual

PHP 8.6.0 RC5 available for testing
    ceil »
    « base_convert
    • Preface
    • Function Reference
    • Mathematical Extensions
    • Math
    • Math Functions

    bindec

    (PHP 4, PHP 5, PHP 7, PHP 8)

    bindec — Binary to decimal

    Description

    function bindec(string $binary_string): int|float

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

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

    bindec() interprets all binary_string values as unsigned integers. This is because bindec() sees the most significant bit as another order of magnitude rather than as the sign bit.

    Parameters

    binary_string

    The binary string to convert. Any invalid characters in binary_string are silently ignored. As of PHP 7.4.0 supplying any invalid characters is deprecated.

    Warning

    The parameter must be a string. Using other data types will produce unexpected results.

    Return Values

    The decimal value of binary_string

    Changelog

    Version Description
    7.4.0 Passing invalid characters will now generate a deprecation notice. The result will still be computed as if the invalid characters did not exist.

    Examples

    Example #1 bindec() example

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

    The above example will output:

    51
    51
    7

    Example #2 bindec() interprets input as unsigned integers

    <?php
    /*
     * The lesson from this example is in the output
     * rather than the PHP code itself.
     */
    
    $magnitude_lower = pow(2, (PHP_INT_SIZE * 8) - 2);
    p($magnitude_lower - 1);
    p($magnitude_lower, 'See the rollover?  Watch it next time around...');
    
    p(PHP_INT_MAX, 'PHP_INT_MAX');
    p(~PHP_INT_MAX, 'interpreted to be one more than PHP_INT_MAX');
    
    if (PHP_INT_SIZE == 4) {
        $note = 'interpreted to be the largest unsigned integer';
    } else {
        $note = 'interpreted to be the largest unsigned integer
                  (18446744073709551615) but skewed by float precision';
    }
    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);  // For readability on 64 bit boxes.
        $dec = bindec($bin);
        echo 'bindec():     ' . $dec . "\n";
    
        if ($note) {
            echo "NOTE:         $note\n";
        }
    
        echo "\n";
    }
    ?>

    Output of the above example on 32 bit machines:

    input:        1073741823
    binary:       00111111111111111111111111111111
    bindec():     1073741823
    
    input:        1073741824
    binary:       01000000000000000000000000000000
    bindec():     1073741824
    NOTE:         See the rollover?  Watch it next time around...
    
    input:        2147483647
    binary:       01111111111111111111111111111111
    bindec():     2147483647
    NOTE:         PHP_INT_MAX
    
    input:        -2147483648
    binary:       10000000000000000000000000000000
    bindec():     2147483648
    NOTE:         interpreted to be one more than PHP_INT_MAX
    
    input:        -1
    binary:       11111111111111111111111111111111
    bindec():     4294967295
    NOTE:         interpreted to be the largest unsigned integer

    Output of the above example on 64 bit machines:

    input:        4611686018427387903
    binary:       0011111111111111111111111111111111111111111111111111111111111111
    bindec():     4611686018427387903
    
    input:        4611686018427387904
    binary:       0100000000000000000000000000000000000000000000000000000000000000
    bindec():     4611686018427387904
    NOTE:         See the rollover?  Watch it next time around...
    
    input:        9223372036854775807
    binary:       0111111111111111111111111111111111111111111111111111111111111111
    bindec():     9223372036854775807
    NOTE:         PHP_INT_MAX
    
    input:        -9223372036854775808
    binary:       1000000000000000000000000000000000000000000000000000000000000000
    bindec():     9223372036854775808
    NOTE:         interpreted to be one more than PHP_INT_MAX
    
    input:        -1
    binary:       1111111111111111111111111111111111111111111111111111111111111111
    bindec():     18446744073709551616
    NOTE:         interpreted to be the largest unsigned integer
                  (18446744073709551615) but skewed by float precision

    Notes

    Note:

    The function can convert numbers that are too large to fit into the platforms int type, larger values are returned as float in that case.

    See Also

    • decbin() - Decimal to binary
    • octdec() - Octal to decimal
    • hexdec() - Hexadecimal to decimal
    • base_convert() - Convert a number between arbitrary bases

    Found A Problem?

    Learn How To Improve This Page • Submit a Pull Request • Report a Bug
    +add a note

    User Contributed Notes 5 notes

    up
    down
    8
    info at rickdg dot nl ¶
    16 years ago
    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;
        }
    } ?>
    up
    down
    3
    martin at punix dot de ¶
    23 years ago
    ## 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)
    up
    down
    2
    gwbdome at freenet dot de ¶
    22 years ago
    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));
     }
    up
    down
    1
    Nitrogen ¶
    17 years ago
    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.
    up
    down
    0
    alan hogan dot com slash contact ¶
    19 years ago
    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);
    }
    ?>
    +add a note
    • Math Functions
      • abs
      • acos
      • acosh
      • asin
      • asinh
      • atan
      • atan2
      • atanh
      • base_​convert
      • bindec
      • ceil
      • clamp
      • cos
      • cosh
      • decbin
      • dechex
      • decoct
      • deg2rad
      • exp
      • expm1
      • fdiv
      • floor
      • fmod
      • fpow
      • hexdec
      • hypot
      • intdiv
      • is_​finite
      • is_​infinite
      • is_​nan
      • log
      • log10
      • log1p
      • max
      • min
      • octdec
      • pi
      • pow
      • rad2deg
      • round
      • sin
      • sinh
      • sqrt
      • tan
      • tanh
    You are visitor 01402503 — GeezerVison does not store the pages you look up.
    Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.