W3docs

base_convert()

Scopri la funzione base_convert() di PHP per convertire numeri da una base numerica a un'altra, con esempi pratici e avvertenze.

La funzione base_convert() converte un numero da una base numerica a un'altra — ad esempio, dal decimale (base 10) al binario (base 2), o dall'esadecimale (base 16) al decimale. È il più versatile tra gli strumenti di conversione di base di PHP, perché funziona con qualsiasi base da 2 a 36, mentre funzioni come dechex() o bindec() sono vincolate a una singola coppia di basi.

Questa pagina illustra la sintassi, il range valido di basi, una serie di esempi eseguibili, le insidie da evitare (distinzione maiuscole/minuscole, frazioni, limiti di precisione) e quando conviene utilizzare una funzione più specifica.

Sintassi

base_convert(string $num, int $from_base, int $to_base): string
ParametroDescrizione
$numIl numero da convertire, fornito come string (viene accettato anche un intero, che verrà convertito in string).
$from_baseLa base in cui $num è attualmente espresso. Deve essere compresa tra 2 e 36.
$to_baseLa base in cui convertire $num. Deve essere compresa tra 2 e 36.

Valore restituito: il numero convertito come string, sempre in minuscolo. Le basi superiori a 10 utilizzano le lettere az per le cifre 10–35 (quindi la base 16 usa 0-9 e a-f, la base 36 usa 0-9 e a-z).

Un esempio di base

L'uso più comune è la conversione di un numero decimale in binario:

php— editable, runs on the server

Il decimale 10 diventa la string "1010" in binario. Nota che il risultato è una string, non un intero — tienilo a mente se intendi eseguire operazioni aritmetiche su di esso in seguito.

Conversione tra basi comuni

La stessa funzione gestisce esadecimale, ottale e qualsiasi base intermedia. Ecco diverse conversioni a confronto:

<?php
echo base_convert("ff", 16, 10), "\n";   // hex -> decimal: 255
echo base_convert("255", 10, 16), "\n";  // decimal -> hex: ff
echo base_convert("777", 8, 10), "\n";   // octal -> decimal: 511
echo base_convert("a37334", 16, 2), "\n";// hex -> binary
echo base_convert("zz", 36, 10), "\n";   // base 36 -> decimal: 1295
?>

Questo produce:

255
ff
511
101000110111001100110100
1295

Poiché base_convert() gestisce entrambi gli estremi della conversione, non è necessario concatenare due chiamate separate per passare, ad esempio, dall'esadecimale al binario.

Cose a cui prestare attenzione

  • Le lettere vengono normalizzate. Le lettere in input possono essere maiuscole o minuscole ("FF" e "ff" funzionano entrambe), ma l'output è sempre in minuscolo.
  • Le frazioni non sono supportate. base_convert() lavora solo su numeri interi. Un valore come "12.34" ha il suo . trattato come un carattere non valido — viene eliminato e vengono convertite solo le cifre (e PHP 8.1+ emette un avviso di deprecazione per i caratteri ignorati).
  • Le cifre non valide vengono ignorate. Un carattere non valido per $from_base (ad esempio un 9 quando $from_base è 8) viene eliminato silenziosamente anziché generare un errore, quindi è bene validare l'input in anticipo.
  • La precisione è limitata. Internamente il valore viene gestito come numero in virgola mobile. Gli interi molto grandi possono perdere precisione e produrre un risultato impreciso. Per la conversione di base con precisione arbitraria, utilizza l'estensione GMP con gmp_init() specificando una base.

Quando usare una funzione più specifica

Se converti sempre da o verso la base 10, le funzioni dedicate sono più chiare e leggermente più veloci:

Usa base_convert() quando nessuna delle due basi è 10 (ad es. hex → binario) o quando la base è insolita, come la base 36 (spesso usata per ID brevi e adatti agli URL).

Conclusione

base_convert() è lo strumento generico di PHP per spostare un numero intero tra due qualsiasi sistemi numerici dalla base 2 alla base 36. Ricorda che restituisce una string in minuscolo, ignora le frazioni e le cifre non valide, ed è limitata dalla precisione in virgola mobile per valori molto grandi. Per le conversioni comuni da decimale a X, gli helper dedicati dec*() / *dec() sono di solito la scelta migliore.

Esercizio

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