W3docs

base_convert()

Функция base_convert() в PHP преобразует число из одной системы счисления в другую — от двоичной до тридцатишестеричной.

Функция base_convert() преобразует число из одной системы счисления в другую — например, из десятичной (основание 10) в двоичную (основание 2) или из шестнадцатеричной (основание 16) обратно в десятичную. Это наиболее универсальная из вспомогательных функций PHP для работы с основаниями систем счисления: она поддерживает любое основание от 2 до 36, тогда как такие функции, как dechex() или bindec(), привязаны к конкретной паре оснований.

На этой странице описаны синтаксис, допустимый диапазон оснований, набор запускаемых примеров, подводные камни (регистр букв, дробные числа, ограничения точности), а также случаи, когда лучше использовать более специализированную функцию.

Синтаксис

base_convert(string $num, int $from_base, int $to_base): string
ПараметрОписание
$numЧисло для преобразования, заданное как string (целое число также принимается и приводится к string).
$from_baseОснование, в котором записано $num. Должно быть от 2 до 36.
$to_baseОснование, в которое нужно преобразовать $num. Должно быть от 2 до 36.

Возвращаемое значение: преобразованное число в виде string, всегда в нижнем регистре. Для оснований выше 10 используются буквы az для цифр 10–35 (так, основание 16 использует 0-9 и a-f, а основание 36 использует 0-9 и a-z).

Базовый пример

Наиболее распространённый случай — преобразование десятичного числа в двоичное:

php— editable, runs on the server

Десятичное 10 преобразуется в string "1010" в двоичной системе. Обратите внимание: результат является string, а не целым числом — имейте это в виду, если планируете выполнять арифметические операции с результатом.

Преобразование между распространёнными системами счисления

Та же функция работает с шестнадцатеричной, восьмеричной и любой другой системой счисления в этом диапазоне. Ниже приведены несколько преобразований рядом:

<?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
?>

Это выведет:

255
ff
511
101000110111001100110100
1295

Поскольку base_convert() понимает оба конца преобразования, не нужно выполнять два отдельных вызова, чтобы, например, перейти из шестнадцатеричной системы в двоичную.

На что следует обратить внимание

  • Регистр нормализуется. Входные буквы могут быть в верхнем или нижнем регистре ("FF" и "ff" оба работают), но результат всегда в нижнем регистре.
  • Дробные числа не поддерживаются. base_convert() работает только с целыми числами. Значение вроде "12.34" — его . трактуется как недопустимый символ: он отбрасывается, и преобразуются только цифры (в PHP 8.1+ игнорируемые символы вызывают уведомление об устаревании).
  • Недопустимые цифры игнорируются. Символ, недопустимый в $from_base (например, 9 при $from_base равном 8), молча отбрасывается без вызова ошибки — поэтому сначала следует проверять входные данные.
  • Точность ограничена. Внутренне значение обрабатывается как число с плавающей точкой. Очень большие целые числа могут потерять точность и дать неточный результат. Для точного преобразования оснований с произвольной точностью используйте расширение GMP и функцию gmp_init() с указанием основания.

Когда использовать более специализированную функцию

Если вы всегда конвертируете из или в основание 10, специализированные функции нагляднее и чуть быстрее:

Используйте base_convert(), когда ни одно из оснований не равно 10 (например, шестнадцатеричная → двоичная) или когда основание нестандартное, как основание 36 (часто используется для коротких, удобных для URL идентификаторов).

Заключение

base_convert() — универсальный инструмент PHP для перевода целых чисел между любыми двумя системами счисления от основания 2 до основания 36. Помните, что функция возвращает string в нижнем регистре, игнорирует дроби и недопустимые цифры, а также ограничена точностью числа с плавающей точкой для очень больших значений. Для стандартных преобразований из десятичной системы в другую лучше использовать специализированные вспомогательные функции dec*() / *dec().

Практика

Практика
Что делает функция base_convert() в PHP?
Что делает функция base_convert() в PHP?
Was this page helpful?