bindec()
La funzione bindec() in PHP converte una stringa binaria nel corrispondente valore decimale. Scopri sintassi, esempi e casi d'uso pratici.
La funzione bindec() converte una stringa di cifre binarie (base 2) nel corrispondente valore decimale (base 10). È l'inversa di decbin() ed è la funzione a cui ricorrere ogni volta che si legge un dato binario — una maschera di permessi, un flag di bit, un valore estratto da testo — e si ha bisogno di un numero intero ordinario con cui lavorare.
Sintassi
bindec(string $binary_string): int|float$binary_string— il numero binario da convertire, passato come string di0e1(ad esempio"1010").- Valore restituito — l'equivalente decimale. È un
intquando il valore rientra nell'intervallo degli interi di PHP, e unfloatper numeri binari molto grandi che altrimenti causerebbero un overflow.
Un esempio di base
La stringa binaria "1010" corrisponde a 1×8 + 0×4 + 1×2 + 0×1 = 10, quindi bindec() restituisce 10.
Perché passare una string e non un numero?
Un errore comune dei principianti è scrivere bindec(1010) senza virgolette. Questo funziona per pura coincidenza con valori piccoli, ma un letterale come 0101 viene interpretato da PHP come numero ottale ancor prima che bindec() lo veda, e i letterali binari grandi perdono gli zeri iniziali. Passa sempre il valore binario come string tra virgolette, in modo che le cifre arrivino intatte:
<?php
echo bindec("00001111"); // 15 — leading zeros are fine in a string
?>Come vengono gestiti i caratteri non validi
bindec() riconosce solo 0 e 1. Qualsiasi altro carattere viene ignorato silenziosamente (questo genera un avviso di deprecazione in PHP 8.1+), quindi il risultato non sarà quello atteso:
<?php
echo bindec("1012"); // 5 — the "2" is ignored, leaving "101" = 5
echo "\n";
echo bindec(""); // 0 — an empty string is treated as zero
?>Poiché la funzione fallisce in silenzio, valida prima l'input fornito dall'utente con preg_match('/^[01]+$/', $value) prima di convertirlo.
Round-trip con decbin()
bindec() e decbin() sono funzioni inverse, utili per ispezionare o costruire maschere di bit:
<?php
$decimal = 42;
$binary = decbin($decimal); // "101010"
$back = bindec($binary); // 42
echo "$decimal -> $binary -> $back"; // 42 -> 101010 -> 42
?>Un uso pratico: lettura dei flag di bit
Le stringhe binarie sono un modo semplice per descrivere un insieme di opzioni attive/disattive. Convertirle in decimale consente di testare i singoli bit con l'operatore AND bit a bit:
<?php
define('READ', bindec("100")); // 4
define('WRITE', bindec("010")); // 2
define('EXECUTE', bindec("001")); // 1
$permissions = bindec("110"); // READ + WRITE = 6
echo ($permissions & WRITE) ? "can write\n" : "cannot write\n"; // can write
echo ($permissions & EXECUTE) ? "can execute\n" : "cannot execute\n"; // cannot execute
?>Funzioni di conversione correlate
| Funzione | Converte |
|---|---|
decbin() | decimale → stringa binaria |
hexdec() | esadecimale → decimale |
octdec() | ottale → decimale |
base_convert() | tra due qualsiasi basi (2–36) |
Conclusione
bindec() trasforma una stringa binaria in un numero decimale, restituendo un int (o un float per valori molto grandi). Ricorda di passare il valore come string tra virgolette, di validarlo prima perché i caratteri non binari vengono ignorati silenziosamente, e di abbinarla a decbin() quando occorre convertire nella direzione opposta. Con questi strumenti a disposizione puoi lavorare agevolmente con maschere di bit, flag e qualsiasi dato memorizzato in base 2.