bindec()
Функция bindec() в PHP преобразует двоичное число в десятичное. Узнайте синтаксис, примеры и особенности работы.
Функция bindec() преобразует строку двоичных цифр (основание 2) в соответствующее десятичное значение (основание 10). Она является обратной к decbin() и используется всякий раз, когда нужно прочитать двоичные данные — маску прав доступа, флаг бита, значение, разобранное из текста — и получить обычное целое число для дальнейшей работы.
Синтаксис
bindec(string $binary_string): int|float$binary_string— двоичное число для преобразования, передаётся в виде строки из0и1(например"1010").- Возвращаемое значение — десятичный эквивалент. Возвращается
int, если значение укладывается в диапазон целых чисел PHP, иfloatдля очень больших двоичных чисел, которые иначе вызвали бы переполнение.
Простой пример
Двоичная строка "1010" равна 1×8 + 0×4 + 1×2 + 0×1 = 10, поэтому bindec() возвращает 10.
Почему нужно передавать строку, а не число?
Типичная первая ошибка — написать bindec(1010) без кавычек. Для небольших значений это случайно работает, но литерал вроде 0101 PHP интерпретирует как восьмеричное число ещё до того, как bindec() его получит, а большие двоичные литералы теряют ведущие нули. Всегда передавайте двоичное значение как строку в кавычках, чтобы цифры поступали в функцию в неизменном виде:
<?php
echo bindec("00001111"); // 15 — leading zeros are fine in a string
?>Как обрабатываются недопустимые символы
bindec() понимает только 0 и 1. Любой другой символ молча отбрасывается (в PHP 8.1+ это вызывает уведомление об устаревании), поэтому результат может быть не тем, что вы ожидаете:
<?php
echo bindec("1012"); // 5 — the "2" is ignored, leaving "101" = 5
echo "\n";
echo bindec(""); // 0 — an empty string is treated as zero
?>Поскольку функция молча игнорирует ошибки, перед преобразованием проверяйте вводимые пользователем данные с помощью preg_match('/^[01]+$/', $value).
Обратное преобразование с decbin()
bindec() и decbin() являются взаимно обратными функциями, что удобно для анализа или построения битовых масок:
<?php
$decimal = 42;
$binary = decbin($decimal); // "101010"
$back = bindec($binary); // 42
echo "$decimal -> $binary -> $back"; // 42 -> 101010 -> 42
?>Практический пример: чтение битовых флагов
Двоичные строки — удобный способ описания набора параметров включено/выключено. Преобразование в десятичное число позволяет проверять отдельные биты с помощью побитового оператора AND:
<?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
?>Связанные функции преобразования
| Функция | Преобразует |
|---|---|
decbin() | десятичное → двоичная строка |
hexdec() | шестнадцатеричное → десятичное |
octdec() | восьмеричное → десятичное |
base_convert() | между любыми двумя основаниями (2–36) |
Заключение
bindec() преобразует двоичную строку в десятичное число, возвращая int (или float для очень больших значений). Помните: передавайте значение как строку в кавычках, предварительно проверяйте его, поскольку небинарные символы молча игнорируются, и используйте decbin() для преобразования в обратном направлении. Владея этими инструментами, вы сможете без труда работать с битовыми масками, флагами и любыми данными в двоичном представлении.