PHP Doku:: Umwandlung von binär zu dezimal - function.bindec.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzMathematische ErweiterungenMathematische FunktionenMathematische Funktionenbindec

Ein Service von Reinhard Neidl - Webprogrammierung.

Mathematische Funktionen

<<base_convert

ceil>>

bindec

(PHP 4, PHP 5)

bindecUmwandlung von binär zu dezimal

Beschreibung

number bindec ( string $binary_string )

Gibt die dezimale Entsprechung der binären Zahl aus dem binary_string-Parameter zurück-

bindec() konvertiert eine binäre Zahl in einen integer oder, falls aus Größengründen benötigt, in einen float.

Parameter-Liste

binary_string

Der zu konvertierende Binärstring

Rückgabewerte

Der Dezimalwert von binary_string

Changelog

Version Beschreibung
Seit 4.1.0 Die Funktion kann nun Werte, die zu groß für ein integer der jeweiligen Plattform ist, stattdessen als float zurückgeben.

Beispiele

Beispiel #1 bindec()-Beispiel

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

echo 
bindec('111');
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

51
51
7

Siehe auch

  • decbin() - Dezimal zu Binär Konvertierung
  • octdec() - Oktal zu Dezimal Umwandlung
  • hexdec() - Hexadezimal zu Dezimal Umwandlung
  • base_convert() - Konvertiert einen numerischen Wert zwischen verschiedenen Zahlensystemen


9 BenutzerBeiträge:
- Beiträge aktualisieren...
info at rickdg dot nl
1.04.2010 14:40
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;
    }
}
?>
Nitrogen
21.07.2009 16:27
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.
nodarinodo at mail dot ru
8.01.2009 20:51
<?php   
// bindecfunc :)))) I think it works well too :)
function bindecc($str)
    {
       
$str = str_replace(" ", "", $str);
       
$strr = preg_match('/[^01]/', $str);
        if(
$strr == 1) { return "<b> Error ! only 1 and 0;</b>"; }
       
$strsig = strlen($str);
       
$strr1 = strrev($str);
       
$strf = '';
        for(
$i = $strsig; $i >= 0; $i--)
        {
           
$strf += ($strr1[$i] * pow(2, $i));
           
#$strf += $str[$i];
       
}
        return
$strf;
    }
?>
flashpack at gmail dot com
16.11.2008 13: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.03.2008 17: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
9.11.2007 10: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);
}
?>
gwbdome at freenet dot de
19.08.2004 23: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
30.05.2003 7: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)
php at silisoftware dot com
1.03.2002 4: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;
}
?>



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)