W3docs

dechex()

Scopri la funzione dechex() in PHP per convertire un numero decimale in una stringa esadecimale.

La funzione PHP dechex() converte un numero intero decimale (base 10) nella sua rappresentazione string esadecimale (base 16). Il sistema esadecimale è alla base dei colori CSS (#ff0000), degli indirizzi di memoria, dei dump di byte e di molti formati di file e di rete, quindi dechex() è il metodo ideale ogni volta che occorre visualizzare un numero in base 16.

Questo capitolo illustra la sintassi della funzione, il comportamento con numeri negativi e float, e gli usi più comuni nel codice reale.

Sintassi

dechex(int $num): string
  • $num — il numero intero decimale da convertire. Viene interpretato come intero a 64 bit, quindi il valore massimo esattamente rappresentabile è PHP_INT_MAX (9223372036854775807).
  • Valore restituito — una string esadecimale in minuscolo (cifre 0-9 e lettere a-f). Il risultato non ha il prefisso 0x né zeri iniziali.

Esempio di base

php— editable, runs on the server

255 è il valore massimo che entra in un singolo byte, quindi viene convertito in ff — le due cifre hex più alte. Altre conversioni rendono chiaro lo schema:

<?php
echo dechex(0);   // 0
echo "\n";
echo dechex(10);  // a
echo "\n";
echo dechex(16);  // 10
echo "\n";
echo dechex(255); // ff
?>

Notare che dechex(16) restituisce "10" — ovvero "uno-zero" in base 16 (16 in decimale), non il numero decimale dieci.

Numeri negativi e float

dechex() funziona solo con interi, ma non rifiuta altri tipi di input — li converte prima, il che può sorprendere:

  • I float vengono troncati verso zero prima della conversione. dechex(20.5) viene trattato come 20 e restituisce 14.
  • I numeri negativi vengono interpretati come rappresentazione senza segno in complemento a due. Su una build a 64 bit, dechex(-1) restituisce ffffffffffffffff (16 cifre f), non un valore con segno meno.
<?php
echo dechex(20.5);  // 14  (the 20.5 is truncated to 20)
echo "\n";
echo dechex(-1);    // ffffffffffffffff on 64-bit PHP
?>

Se si ha bisogno di una string hex con segno, occorre gestirlo manualmente: ($n < 0 ? '-' : '') . dechex(abs($n)).

Padding e formattazione dell'output

Poiché dechex() elimina gli zeri iniziali, un byte a singola cifra come 5 viene restituito come "5" anziché "05". Quando serve una larghezza fissa — ad esempio per costruire un colore CSS dai componenti RGB — bisogna aggiungere il padding al risultato:

<?php
$r = 5; $g = 200; $b = 16;

$color = sprintf('#%02s%02s%02s', dechex($r), dechex($g), dechex($b));
echo $color; // #05c810
?>

È anche possibile formattare hex direttamente con sprintf() usando la conversione %x (minuscolo) o %X (maiuscolo), che è spesso più pulita quando si vuole anche il padding:

<?php
echo sprintf('%02X', 255); // FF
?>

La funzione inversa: hexdec()

Per fare il percorso inverso — da una string esadecimale a un numero intero decimale — usare hexdec(). Le due funzioni sono inverse l'una dell'altra:

<?php
echo hexdec(dechex(255)); // 255
?>

Quando usare dechex()

  • Generare o ispezionare codici colore CSS / hex da valori RGB numerici.
  • Produrre hex dump di dati binari insieme a bin2hex().
  • Visualizzare valori di bitmask o flag in forma compatta e leggibile.
  • Registrare valori di memoria o offset nella base che gli sviluppatori si aspettano.

Per altre basi, PHP fornisce funzioni analoghe: decbin() per il binario e decoct() per l'ottale, con bindec() e octdec() per la conversione inversa.

Conclusione

dechex() trasforma un intero decimale in una string esadecimale minuscola, senza prefisso 0x e senza zeri iniziali. Tenere a mente i suoi comportamenti particolari — i float vengono troncati, i negativi diventano senza segno — e usare sprintf('%02x', ...) quando serve il padding. Abbinarla a hexdec() ogni volta che occorre fare conversioni di andata e ritorno tra le due basi.

Esercitazione

Pratica
Cosa fa la funzione dechex() in PHP?
Cosa fa la funzione dechex() in PHP?
Was this page helpful?