W3docs

hexdec()

Scopri la funzione hexdec() in PHP, usata per convertire un numero esadecimale nel suo equivalente decimale.

La funzione PHP hexdec() converte una stringa esadecimale (base 16) nel suo equivalente decimale (base 10). È l'inversa di dechex() ed è utile ogni volta che si leggono valori hex provenienti da colori, dump di byte, hash o protocolli di basso livello e si ha bisogno di eseguire operazioni aritmetiche su di essi.

Questa pagina tratta la sintassi, il tipo di ritorno effettivo, il modo in cui hexdec() gestisce i caratteri non validi, il problema dei numeri grandi e il rapporto con le altre funzioni di conversione di base.

Sintassi

hexdec(string $hex_string): int|float
  • $hex_string — la stringa esadecimale da convertire. Le cifre hex sono 0-9 e a-f (senza distinzione tra maiuscole e minuscole, quindi FF e ff sono equivalenti).
  • Valore di ritorno — il valore decimale come int, oppure un float quando il numero è troppo grande per rientrare in un intero PHP.

Un Esempio di Base

php— editable, runs on the server

1a in base 16 significa 1 × 16 + 10 = 26, che è il valore stampato. L'input è una stringa in questo caso — è il modo normale e consigliato per passare valori hex, poiché un letterale come 1a non è PHP valido e 0x1a sarebbe già un intero.

Conversione di Più Valori

hexdec() non è sensibile alle maiuscole e ignora qualsiasi prefisso 0x che si potrebbe copiare da un altro strumento:

<?php
echo hexdec("ff"), "\n";   // 255
echo hexdec("FF"), "\n";   // 255 (same — case does not matter)
echo hexdec("100"), "\n";  // 256
echo hexdec("7fff"), "\n"; // 32767
echo hexdec("0x1A"), "\n"; // 26  (the "0x" is ignored)
?>

Un utilizzo comune nel mondo reale è la suddivisione di un colore hex CSS nei suoi canali rosso, verde e blu:

<?php
$color = "ff8800";

$red   = hexdec(substr($color, 0, 2)); // 255
$green = hexdec(substr($color, 2, 2)); // 136
$blue  = hexdec(substr($color, 4, 2)); // 0

echo "rgb($red, $green, $blue)"; // rgb(255, 136, 0)
?>

Come Vengono Gestiti i Caratteri Non Validi

hexdec() non genera un errore su una stringa malformata. Al contrario, ogni carattere che non è una cifra hex valida viene ignorato silenziosamente (e, a partire da PHP 7.4, viene emesso un avviso di deprecazione/E_WARNING). Le cifre valide rimanenti vengono comunque convertite:

<?php
echo hexdec("a0.5"), "\n"; // 2565 — the "." is dropped, so "a05" is converted
echo hexdec("xyz1f"), "\n"; // 31  — only "1f" is valid hex
?>

Poiché l'errore è silenzioso, è necessario validare l'input manualmente quando potrebbe provenire da fonti non attendibili. ctype_xdigit() verifica che una stringa contenga solo cifre hex:

<?php
$input = "a0.5";

if (ctype_xdigit($input)) {
    echo hexdec($input);
} else {
    echo "Not a valid hexadecimal string";
}
// Not a valid hexadecimal string
?>

I Numeri Grandi Restituiscono un Float

Gli interi PHP sono limitati dalla piattaforma (64 bit sulla maggior parte dei sistemi moderni). Quando un valore hex supera PHP_INT_MAX, hexdec() restituisce un float invece di un int affinché il valore non venga troncato — sebbene i float molto grandi perdano precisione:

<?php
var_dump(hexdec("1a"));               // int(26)
var_dump(hexdec("ffffffffffffffff")); // float(1.8446744073709552E+19)
?>

Se è necessaria un'aritmetica esatta su numeri hex di grandi dimensioni, si consiglia di ricorrere alle estensioni BCMath o GMP.

Funzioni di Conversione di Base Correlate

hexdec() fa parte di una famiglia di convertitori di base. Scegli quella che corrisponde alle basi di input e output:

FunzioneConverte daConverte a
hexdec()esadecimaledecimale
dechex()decimaleesadecimale
bindec()binariodecimale
octdec()ottaledecimale

Per basi arbitrarie (dalla base 2 alla base 36) usa base_convert(), e per convertire una stringa hex in byte grezzi usa hex2bin().

Conclusione

hexdec() converte una stringa esadecimale in un numero decimale, restituendo un int (o un float per valori molto grandi). Ricorda che ignora silenziosamente i caratteri non validi — quindi valida l'input non attendibile con ctype_xdigit() prima — e usa la sua controparte dechex() per la conversione inversa.

Pratica

Pratica
Cosa fa la funzione hexdec di PHP?
Cosa fa la funzione hexdec di PHP?
Was this page helpful?