|
 |
decbin (PHP 3, PHP 4, PHP 5) decbin -- Decimal to binary Descriptionstring decbin ( int number )
Returns a string containing a binary representation of the given
number argument. The largest number that can be converted is
4294967295 in decimal resulting to a string of 32 1's.
Пример 1. decbin() example
<?php
echo decbin(12) . "\n";
echo decbin(26);
?>
|
Результат выполнения данного примера: |
See also bindec(),
decoct(),
dechex() and
base_convert().
decbin
Xavier Daull
04-Feb-2006 02:57
A fast function to convert a binary string to a bit sequence
<?php
function BinString2BitSequence($mystring) {
$mybitseq = "";
$end = strlen($mystring);
for($i = 0 ; $i < $end; $i++){
$mybyte = decbin(ord($mystring[$i])); $mybitseq .= substr("00000000",0,8 - strlen($mybyte)) . $mybyte; }
return $mybitseq;
}
echo BinString2BitSequence("ABCDEF"); ?>
06-Jan-2006 06:29
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.
j dot preece at gmail dot com
03-Jan-2006 05:00
It occured to me there must be a simple way to produce binary numbers from decimal ones with any number of bits, here's my attempt at a decimal to extended binary function. I hope the comments make it clear:
<?php
function decextbin($decimalnumber,$bit)
{
$maxval = 1;
$sumval = 1;
for($i=1;$i<$bit;$i++)
{
$maxval = $maxval * 2;
$sumval = $sumval + $maxval;
}
if ($sumval < $decimalnumber) return 'ERROR - Not enough bits to display this figure in binary.';
for($bitvalue=$maxval;$bitvalue>=1;$bitvalue=$bitvalue/2)
{
if (($decimalnumber/$bitvalue) >= 1) $thisbit = 1; else $thisbit = 0;
if ($thisbit == 1) $decimalnumber = $decimalnumber - $bitvalue;
$binarynumber .= $thisbit;
}
return $binarynumber;
}
?>
An example usage might be like so:
<?php
for ($i = 0;$i<=8;$i++)
{
echo decextbin($i,4).'<br />';
}
?>
Output:
0000
0001
0010
0011
0100
0101
0110
0111
1000
No need for padding or anything - also goes way over 32 bits. Huzzah. I suspect its limited by the maximum string length in php. Hmmm - Not sure what that is.
dcramer at gmail dot com
26-Apr-2005 04:57
matt at nexxmedia dot com (06-Dec-2002 04:29) said:
<?php
...
strrev(str_pad(decbin($decval),8,"0",STR_PAD_LEFT));
...
?>
<?php
str_pad(decbin ($decval),8,'0');
?>
produces the same results!
--
That's incorrect, it does not produce the same results.
Stefan
02-Mar-2005 11:35
matt at nexxmedia dot com (06-Dec-2002 04:29) said:
<?php
...
strrev(str_pad(decbin($decval),8,"0",STR_PAD_LEFT));
...
?>
<?php
str_pad(decbin ($decval),8,'0');
?>
produces the same results!
08-Feb-2005 07:27
base_convert( base_convert('100001000100000000010001001000
0100100000001111111111111111111',2,10),10,2);
return
'1000010001000000000100010010000
100100000010000000000000000000'
this function doesn't work
27-Nov-2004 07:26
<?php function decbin4long($long) {
return base_convert($long,10,2);
} ?>
gene_wood at example dot com
15-Oct-2003 02:38
This is just an extension off of the first comment. This is a pair of function to convert from an array of binary values to an integer and vice versa. It has a touch of error checking.
/**
* Will convert an array of binary values into an integer for storage
*
* @param array $data_array Array of 31 or less binary values
* @return integer Encoded integer
*/
function array_to_binary_int($data_array) {
if (count($data_array) > 31) return FALSE;
foreach ($data_array as $key => $value) {
if ($value) $data_array[$key] = 1;
if (!$value) $data_array[$key] = 0;
}
$binstring = strrev(implode('', $data_array));
$bit_integer = bindec($binstring);
return $bit_integer;
}
/**
* Will convert a stored integer into an array of binary values
*
* @param integer $data_integer Encoded integer
* @return integer Array of binary values
*/
function binary_int_to_array($data_integer) {
if (($data_integer > 2147483647) OR ($data_integer < 0)) return FALSE;
$binstring = strrev(str_pad(decbin ($data_integer),31,"0",STR_PAD_LEFT));
$bitarray = explode(":",chunk_split($binstring, 1, ":"));
return $bitarray;
}
matt at nexxmedia dot com
05-Dec-2002 06:29
A quick one-line bitmask. Great for storing a list of checkbox settings in a MySQL database. This one works for TinyINT (8 bits). Note: I had to make it two lines here so it would fit.
$decval = 83;
/*
decimal to binary, padded with 0s, reversed so the least significant digit is first, split with colons, and then separated into an array
*/
$binstring = strrev(str_pad(decbin ($decval),8,"0",STR_PAD_LEFT))
$bitarray = explode(":",chunk_split($binstring, 1, ":"));
for($x = 0; $x < 8; $x++) {
echo $bitarray[$x]." ";
}
// will output 1 1 0 0 1 0 1 0
php at silisoftware dot com
28-Feb-2002 07:15
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;
}
gthompsn at ucar dot edu
22-Jan-2002 11:04
To pad leading zeroes onto the output of decbin, I prefer to use something like this for my 8-bit integer:
$qcStr=sprintf("%08d",decbin($myInt));
--Greg T.
ajl at gmx dot de
08-Oct-2001 01:47
HERE you can convert 64bit instead of 32bit with the standard decbin
<?
function bigdecbin($dec,$doublewords=1) {
$erg = "";
do {
$rest = $dec%2147483648;
if ($rest<0) $rest+=2147483648;
$erg = str_pad(decbin($rest),31,"0",STR_PAD_LEFT).$erg;
$dec = ($dec-$rest)/2147483648;
} while (($dec>0)&&(!($dec<1)));
return str_pad($erg,$doublewords*31,"0",STR_PAD_LEFT);
}
echo "<pre>";
for ($i=1.5*2147483647.0-10;$i<1.5*2147483647.0+10;$i++) {
echo "DEC:".$i." BIN:".bigdecbin($i,2)."<br>";
}
echo "</pre>";
?>
sam at barnum dot com
12-Apr-2001 07:26
or pad the string like:
substr("000" . $decbin($i), -3, 3);
nospam dot me at padamj dot com
11-Mar-2001 05:56
do this to pad the binary:
str_pad(decbin($dec),3,"0",STR_PAD_LEFT);
output like:
001
010
oubiwann at yahoo dot com
17-Jan-2001 04:04
Here's a little binary for counting on your fingers up to 1023 (from 0). It formats/pads the binary number like you wanted.
<pre>
<?php
print "<pre>Dec : Finger Positions\n";
print "---- : ----------------\n";
for ( $i=0; strlen($bin) <=10; ++$i ) {
$bin = decbin($i);
$output = sprintf("%04d : ", $i);
$bin_temp = $bin;
while ( strlen($bin_temp) < 10 ) {
$bin_temp = "0" . $bin_temp;
}
print $output . $bin_temp . "\n";
}
print "</pre>\n";
?>
</pre>
I tried using sprintf("%04d : %10d", $i, $bin) and sprintf("%04d : %10d", $i, $bin + 0), the later an attempt to force the string to act as a number, but neither worked. Maybe it was me...
sterba at locksley-west dot com
10-Jan-2001 12:55
I had the same problem on PHP 3.0.9, so the str_repeat was not an option. This maight help:
while (strlen($result)<3) $result="0".$result;
| |