W3docs

bin2hex()

La funzione bin2hex() converte dati binari in una string esadecimale. Scopri sintassi, esempi e differenze con funzioni correlate.

La funzione PHP bin2hex() converte una string di byte grezzi nella sua rappresentazione esadecimale. Ogni byte (8 bit) diventa esattamente due cifre esadecimali, quindi la string restituita è sempre il doppio della lunghezza dell'input. Nonostante il nome, l'input è qualsiasi string binary-safe — non una string di caratteri "0"/"1" — il che rende bin2hex() il metodo standard per trasformare dati binari arbitrari (byte di immagini, chiavi di cifratura, hash) in una forma ASCII sicura e stampabile.

Questa pagina descrive la sintassi, un esempio funzionante, le differenze rispetto alle funzioni correlate e le insidie da tenere a mente.

Sintassi

bin2hex(string $string): string

Accetta un singolo parametro, $string — i dati binari da codificare — e restituisce una string di caratteri esadecimali minuscoli (0-9, a-f). La funzione è disponibile da PHP 4.0.5 e non restituisce mai false.

Esempio base

php— editable, runs on the server

Qui il testo "Hello, World!" viene passato a bin2hex(), che codifica il valore byte di ogni carattere come due cifre esadecimali. L'output è:

48656c6c6f2c20576f726c6421

Ad esempio, il primo carattere H ha il valore byte 0x48, e è 0x65, e così via — concatenando queste coppie si ottiene il risultato mostrato sopra.

Perché usare bin2hex()

Il motivo più comune è rendere i dati binari sicuri da stampare, registrare nei log, salvare in una colonna di testo o inviare in una URL. I byte grezzi possono contenere caratteri non stampabili o di controllo; la loro forma esadecimale è puro ASCII.

<?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)
?>

Si ottiene un token di 16 caratteri perché 8 byte corrispondono a 16 cifre esadecimali.

Inversione della conversione

Usa hex2bin() per riconvertire una string esadecimale nei byte originali. Le due funzioni sono inverse esatte per qualsiasi input valido:

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

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

bin2hex() vs. dechex()

Queste due funzioni si confondono facilmente:

  • bin2hex() opera su una string di byte e codifica ogni byte come due cifre esadecimali.
  • dechex() opera su un singolo intero e restituisce la sua forma esadecimale senza riempimento di zeri.
<?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)
?>

Insidie

  • Solo minuscolo. bin2hex() emette sempre lettere minuscole. Se hai bisogno di maiuscole, applica strtoupper() al risultato.
  • La lunghezza raddoppia. La lunghezza dell'output è sempre 2 * strlen($input); una string vuota restituisce una string vuota.
  • Non è crittografia. La codifica esadecimale è completamente reversibile e non offre alcuna sicurezza — cambia solo la rappresentazione. Per l'hashing usa md5() o sha1(), che restituiscono già string esadecimali.

Funzioni correlate

  • hex2bin() — l'operazione inversa.
  • dechex() — converte un singolo intero in esadecimale.
  • ord() — ottieni il valore byte di un singolo carattere.
  • strlen() — misura la lunghezza in byte di una string.

Pratica

Pratica
Qual è la funzione di bin2hex() in PHP?
Qual è la funzione di bin2hex() in PHP?
Was this page helpful?