2011-04-18 11 views

Respuesta

6

así:

echo decbin(3); // 11 
5

decbin(your_int) devolverá una cadena en números binarios que representan el mismo valor que your_int, suponiendo que eso es lo que está pidiendo.

2
<?php 
/** 
* Returns an ASCII string containing 
* the binary representation of the input data . 
**/ 
function str2bin($str, $mode=0) { 
    $out = false; 
    for($a=0; $a < strlen($str); $a++) { 
     $dec = ord(substr($str,$a,1)); 
     $bin = ''; 
     for($i=7; $i>=0; $i--) { 
      if ($dec >= pow(2, $i)) { 
       $bin .= "1"; 
       $dec -= pow(2, $i); 
      } else { 
       $bin .= "0"; 
      } 
     } 
     /* Default-mode */ 
     if ($mode == 0) $out .= $bin; 
     /* Human-mode (easy to read) */ 
     if ($mode == 1) $out .= $bin . " "; 
     /* Array-mode (easy to use) */ 
     if ($mode == 2) $out[$a] = $bin; 
    } 
    return $out; 
} 
?> 

Copiado de: http://php.net/manual/en/ref.strings.php

+0

sería más fácil reemplazar el bucle interno con decibe(), o al menos usar funciones de desplazamiento de bit en lugar de funciones exponenciales. –

+0

sí, también lo noté. No es el código mío que acabo de copiar del sitio php. –

1

¿Qué hay de: <?php $binary = (binary) $string; $binary = b"binary string"; ?>

(de php.net)

+0

Eso no muestra la cadena en representación binaria, solo "convierte" (o crea) una cadena literal en una cadena binaria. –

3

O puede utilizar base_convert función para convertir el símbolo códigos a binarios, aquí hay un modifi función ed:

function str2bin($str) 
{ 
    $out=false; 
    for($a=0; $a < strlen($str); $a++) 
    { 
     $dec = ord(substr($str,$a,1)); //determine symbol ASCII-code 
     $bin = sprintf('%08d', base_convert($dec, 10, 2)); //convert to binary representation and add leading zeros 
     $out .= $bin; 
    } 
    return $out; 
} 

Es útil para convertir resultado inet_pton() para comparar las direcciones IPv6 en formato binario (ya que realmente no se puede convertir una dirección IPv6 de 128 bits a un entero, que es de 32 o de 64 bits en php). Puede encontrar más información sobre ipv6 y php here (working-with-ipv6-addresses-in-php) y here (how-to-convert-ipv6-from-binary-for-storage-in-mysql).

7

Otra solución:

function d2b($dec, $n = 16) { 
    return str_pad(decbin($dec), $n, "0", STR_PAD_LEFT); 
} 

Ejemplo:

// example: 
echo d2b(E_ALL); 
echo d2b(E_ALL | E_STRICT); 
echo d2b(0xAA55); 
echo d2b(5); 

Output: 
0111011111111111 
0111111111111111 
1010101001010101 
0000000000000101 
2
$a = 42; 
for($i = 8 * PHP_INT_SIZE - 1; $i >= 0; $i --) { 
    echo ($a >> $i) & 1 ? '1' : '0'; 
} 
Cuestiones relacionadas