W3docs

bin2hex()

La función bin2hex() convierte datos binarios en una cadena hexadecimal. Aprende su sintaxis, ejemplos y funciones relacionadas.

La función PHP bin2hex() convierte una cadena de bytes sin procesar en su representación hexadecimal. Cada byte (8 bits) se convierte exactamente en dos dígitos hexadecimales, por lo que la cadena devuelta siempre es el doble de larga que la entrada. A pesar del nombre, la entrada es cualquier string seguro para binario — no una cadena de caracteres "0"/"1" — lo que hace de bin2hex() la forma estándar de convertir datos binarios arbitrarios (bytes de imagen, claves de cifrado, hashes) en una forma ASCII segura e imprimible.

Esta página cubre la sintaxis, un ejemplo funcional, cómo difiere de funciones relacionadas y los problemas a tener en cuenta.

Sintaxis

bin2hex(string $string): string

Acepta un único parámetro, $string — los datos binarios a codificar — y devuelve una cadena de caracteres hexadecimales en minúsculas (0-9, a-f). La función está disponible desde PHP 4.0.5 y nunca devuelve false.

Ejemplo básico

php— editable, runs on the server

Aquí el texto "Hello, World!" se pasa a bin2hex(), que codifica el valor en bytes de cada carácter como dos dígitos hexadecimales. La salida es:

48656c6c6f2c20576f726c6421

Por ejemplo, el primer carácter H tiene el valor de byte 0x48, e es 0x65, y así sucesivamente — concatenando esos pares se obtiene el resultado anterior.

Por qué usar bin2hex()

La razón más común es hacer que los datos binarios sean seguros para imprimir, registrar, almacenar en una columna de texto o enviar en una URL. Los bytes sin procesar pueden contener caracteres no imprimibles o de control; su forma hexadecimal es ASCII puro.

<?php
// Generate 8 random bytes and show them as a hex token.
$bytes = random_bytes(8);
echo bin2hex($bytes); // e.g. "9f3a1c84e2b07d56" (16 hex chars)
?>

Se produce un token de 16 caracteres porque 8 bytes se mapean a 16 dígitos hexadecimales.

Revertir la conversión

Usa hex2bin() para convertir una cadena hexadecimal de vuelta a los bytes originales. Las dos funciones son inversas exactas para cualquier entrada válida:

<?php
$original = "PHP";
$hex      = bin2hex($original);     // "504850"
$restored = hex2bin($hex);          // "PHP"

var_dump($original === $restored);  // bool(true)
?>

bin2hex() vs. dechex()

Es fácil confundirlas:

  • bin2hex() trabaja sobre una cadena de bytes y codifica cada byte como dos dígitos hexadecimales.
  • dechex() trabaja sobre un entero único y devuelve su forma hexadecimal sin relleno de ceros.
<?php
echo bin2hex("A");  // "41"  (the byte 0x41)
echo "\n";
echo dechex(65);    // "41"  (the integer 65)
echo "\n";
echo dechex(10);    // "a"   (no leading zero)
?>

Problemas a tener en cuenta

  • Solo minúsculas. bin2hex() siempre emite letras en minúsculas. Si necesitas mayúsculas, aplica strtoupper() al resultado.
  • La longitud se duplica. La longitud de la salida siempre es 2 * strlen($input); una cadena vacía devuelve una cadena vacía.
  • No es cifrado. La codificación hexadecimal es totalmente reversible y no proporciona seguridad — solo cambia la representación. Para hashing usa md5() o sha1(), que ya devuelven cadenas hexadecimales.

Funciones relacionadas

  • hex2bin() — la operación inversa.
  • dechex() — convierte un entero único a hexadecimal.
  • ord() — obtiene el valor en bytes de un único carácter.
  • strlen() — mide la longitud en bytes de una cadena.

Práctica

Práctica
¿Cuál es la función de bin2hex() en PHP?
¿Cuál es la función de bin2hex() en PHP?
Was this page helpful?