decbin

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

decbinWandelt von dezimal zu binär um

Beschreibung

decbin(int $num): string

Gibt die binäre Darstellung der in num angegebenen Ganzzahl als Zeichenkette zurück.

Parameter-Liste

num

Der umzuwandelnde Dezimalwert.

Wertebereich der Eingabe unter 32bit-Systemen
positive num negative num Rückgabewert
0   0
1   1
2   10
... weiterer Verlauf ...
2147483646   1111111111111111111111111111110
2147483647 (größte vorzeichenbehaftete Ganzzahl)   1111111111111111111111111111111 (31 Einsen)
2147483648 -2147483648 10000000000000000000000000000000
... weiterer Verlauf ...
4294967294 -2 11111111111111111111111111111110
4294967295 (größte vorzeichenlose Ganzzahl) -1 11111111111111111111111111111111 (32 Einsen)
Wertebereich der Eingabe unter 64bit-Systemen
positive num negative num Rückgabewert
0   0
1   1
2   10
... weiterer Verlauf ...
9223372036854775806   111111111111111111111111111111111111111111111111111111111111110
9223372036854775807 (größte vorzeichenbehaftete Ganzzahl)   111111111111111111111111111111111111111111111111111111111111111 (63 Einsen)
  -9223372036854775808 1000000000000000000000000000000000000000000000000000000000000000
... weiterer Verlauf ...
  -2 1111111111111111111111111111111111111111111111111111111111111110
  -1 1111111111111111111111111111111111111111111111111111111111111111 (64 Einsen)

Rückgabewerte

Binärdarstellung von num als Zeichenkette.

Beispiele

Beispiel #1 decbin()-Beispiel

<?php
echo decbin(12) . "\n";
echo
decbin(26);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

1100
11010

Siehe auch

  • bindec() - Wandelt von binär zu dezimal um
  • decoct() - Wandelt von dezimal zu oktal um
  • dechex() - Wandelt von dezimal zu hexadezimal um
  • base_convert() - Wandelt einen numerischen Wert zwischen verschiedenen Zahlensystemen um
  • printf() - Liefert einen formatierten String unter Verwendung von %b, %032b oder %064b als Format
  • sprintf() - Gibt einen formatierten String zurück unter Verwendung von %b, %032b oder %064b als Format

add a note

User Contributed Notes 9 notes

up
26
MarcelG
11 years ago
To add leading zeros I prefer the following:<?php// Add leading zeros$bin = sprintf( "%08d", decbin( 26 )); // "00011010"?>
up
7
rambabusaravanan at gmail dot com
8 years ago
Print as binary format with leading zeros into a variable in one simple statement.<?php    $binary = sprintf('%08b',  $decimal);    // $decimal = 5;    echo $binary;    // $binary = "00000101";?>
up
7
Xavier Daull
19 years ago
A fast function to convert a binary string to a bit sequence<?phpfunction BinString2BitSequence($mystring) {        $mybitseq = "";    $end = strlen($mystring);    for($i = 0 ; $i < $end; $i++){        $mybyte = decbin(ord($mystring[$i])); // convert char to bit string        $mybitseq .= substr("00000000",0,8 - strlen($mybyte)) . $mybyte; // 8 bit packed    }    return $mybitseq;}echo BinString2BitSequence("ABCDEF"); // OUTPUT=010000010100001001000011010001000100010101000110?>
up
4
coverup
8 years ago
Regarding trailing zeros, after test all the option mention here by others, i have performed my own tests regarding efficiency, here are the results:<?php$decimal = 9;$time_start = microtime(true);for ($i=0;$i<1000;$i++){$bin = printf('%08b',  $decimal);}$time_end = microtime(true);$time = $time_end - $time_start;echo "<hr>Duracion $time segundos<br>\n";echo $bin . '<br>';$time_start = microtime(true);for ($i=0;$i<1000;$i++){$bin = sprintf( "%08d", decbin( $decimal ));}$time_end = microtime(true);$time = $time_end - $time_start;echo "<hr>Duracion $time segundos<br>\n";echo $bin . '<br>';$time_start = microtime(true);for ($i=0;$i<1000;$i++){$bin = decbin($decimal);$bin = substr("00000000",0,8 - strlen($bin)) . $bin;}$time_end = microtime(true);$time = $time_end - $time_start;echo "<hr>Duracion $time segundos<br>\n";echo $bin . '<br>';?>results0000100100001001000010010000100.... (output is echoed 1000 times)Duracion 0.0134768486023 segundos8Duracion 0.00054407119751 segundos00001001Duracion 0.000833988189697 segundos00001001Thus the winner is <?php$bin = sprintf( "%08d", decbin( $decimal ));?>
up
4
noname at example dot com
10 years ago
If you want leading zeros use php built-in features instead of custom functions<?phpprintf('%08b',  $decimal);?>>> printf('%08b', E_NOTICE)>> 00001000
up
6
Anonymous
19 years ago
Just an example:If you convert 26 to bin you'll get 11010, which is 5 chars long. If you need the full 8-bit value use this:$bin = decbin(26);$bin = substr("00000000",0,8 - strlen($bin)) . $bin;This will convert 11010 to 00011010.
up
1
dj.luiting(.a.t.)gmail.com
11 years ago
hi folks, i struggled for a day to get a big decimal number converted into binary, on the windows platform.finally with bcmath functions this is what worked for me.function bc_convert2bin($string) {    //got it to work with bcmath functions, works for 64 bit on 32 bit windows machine    $finished=0;    $base=2;    $bin_nr='';    if(preg_match("/[^0-9]/", $string)) {        for($i=0; $string!=chr($i); $i++) {            $dec_nr=$i;        }    } else {        $dec_nr=$string;    }    //while( $dec_nr>$base ) {    while( bccomp($dec_nr,$base) == 1 ) {        //$base=$base*2;        $base=bcmul($base,'2');        //if($base>$dec_nr) {        if( bccomp($base,$dec_nr) == 1 ) {            //$base=$base/2;            $base=bcdiv($base,'2');            break;        }    }    while(!$finished) {        //if(($dec_nr-$base)>0) {        if( bccomp( bcsub($dec_nr,$base) , 0) == 1 ) {            //$dec_nr=$dec_nr-$base;            $dec_nr=bcsub($dec_nr,$base);            $bin_nr.=1;            //$base=$base/2;            $base=bcdiv($base,'2');        //} elseif(($dec_nr-$base)<0) {        } elseif( bccomp( bcsub($dec_nr,$base) , 0) == -1 ) {            $bin_nr.=0;            //$base=$base/2;            $base=bcdiv($base,'2');        //} elseif(($dec_nr-$base)==0) {        } elseif( bccomp( bcsub($dec_nr,$base) , 0) == 0 ) {            $bin_nr.=1;            $finished=1;            //while($base>1) {            while( bccomp($base,1) == 1 ) {                $bin_nr.=0;                //$base=$base/2;                $base=bcdiv($base,'2');            }        }    }    return $bin_nr;}
up
1
php at silisoftware dot com
23 years ago
Another larger-than-31-bit function.Works for very large numbers, but at the expense of perfect bit-precision as the size increases (I noticed rounding errors past 16 or so decimal places) so use with caution, and only when decbin() won't cut it.function Dec2Bin($number) {    while ($number >= 256) {        $bytes[] = (($number / 256) - (floor($number / 256))) * 256;        $number = floor($number / 256);    }    $bytes[] = $number;    for ($i=0;$i<count($bytes);$i++) {        $binstring = (($i == count($bytes) - 1) ? decbin($bytes[$i]) : str_pad(decbin($bytes[$i]), 8, "0", STR_PAD_LEFT)).$binstring;    }    return $binstring;}
up
0
malcolm.murphy
8 years ago
The GNU MP library (http://php.net/manual/en/book.gmp.php) provides methods to efficiently convert binary strings of any length to their binary representation (i.e., a `decbin` equivalent for strings).<?php$str = random_bytes(1024); // binary string example$result = gmp_strval(gmp_import($str), 2); // see manual for options such as endianness$zeroPadded = sprintf('%0' . (strlen($str) * 8) . 's', $result); // zero-pad if needed, e.g. with str_pad, or sprintf as shown here$strAgain = gmp_export(gmp_init($result, 2)); // reverse operation similar to bindec?>
To Top