decoct()
Функция decoct() в PHP преобразует десятичное число в восьмеричное. Узнайте синтаксис, примеры и типичные ошибки.
Функция decoct() преобразует десятичное (по основанию 10) целое число в его восьмеричное (по основанию 8) string-представление. Это встроенный инструмент PHP для конвертации в направлении «десятичное → восьмеричное», обратный функции octdec().
Восьмеричная система по-прежнему встречается в реальном коде — наиболее заметно в правах доступа к файлам Unix, где 0755 и 0644 являются восьмеричными значениями. decoct() позволяет превратить вычисленное целочисленное значение прав обратно в привычную трёхзначную строку.
Синтаксис
decoct(int $num): string$num— десятичное целое число для преобразования. Если передано число с плавающей точкой, оно сначала усекается до целого.- Возвращаемое значение — string, содержащий восьмеричное представление. Результат является string, а не числом, поскольку восьмеричные значения обычно используются для отображения, а не в дальнейшей арифметике.
Наибольшее число, которое можно преобразовать, зависит от размера целого числа на платформе (PHP_INT_MAX). Отрицательные числа интерпретируются по схеме дополнения до двух для разрядности платформы.
Базовый пример
Десятичное 15 равно 17 в восьмеричной системе (1 * 8 + 7 = 15). Обратите внимание: echo выводит 17 без ведущего нуля — decoct() никогда не добавляет префикс 0, который используется в исходном коде для восьмеричных литералов.
Распространённые значения
<?php
echo decoct(8); // 10
echo "\n";
echo decoct(64); // 100
echo "\n";
echo decoct(493); // 755 (the rwxr-xr-x permission set)
?>Поскольку 493 в восьмеричной системе равно 755, decoct() удобна, когда вы считываете числовой режим файла и хотите отобразить его в формате, ожидаемом chmod.
Чтение битов прав доступа к файлу
fileperms() возвращает режим вместе с битами типа файла, поэтому перед преобразованием используйте маску & 0777, чтобы оставить только биты прав доступа:
<?php
$mode = 0755; // octal literal -> stored as decimal 493
echo decoct($mode & 0777); // 755
?>Типичные ошибки
- Результат — string без ведущего нуля. Если вам нужна стандартная четырёхсимвольная форма, добавьте его самостоятельно:
'0' . decoct(493)даёт"0755". - Числа с плавающей точкой усекаются, а не округляются.
decoct(15.9)возвращает"17"(то же, чтоdecoct(15)), поскольку сначала число приводится к типуint. - Функция работает только с целыми числами. Для преобразования между произвольными основаниями используйте
base_convert().
Связанные функции
octdec()— обратная функция: восьмеричный string обратно в десятичное число.dechex()иdecbin()— преобразование десятичного числа в шестнадцатеричное и двоичное.base_convert()— преобразование числа между любыми двумя основаниями от 2 до 36.