W3docs

decoct()

Функция decoct() в PHP преобразует десятичное число в восьмеричное. Узнайте синтаксис, примеры и типичные ошибки.

Функция decoct() преобразует десятичное (по основанию 10) целое число в его восьмеричное (по основанию 8) string-представление. Это встроенный инструмент PHP для конвертации в направлении «десятичное → восьмеричное», обратный функции octdec().

Восьмеричная система по-прежнему встречается в реальном коде — наиболее заметно в правах доступа к файлам Unix, где 0755 и 0644 являются восьмеричными значениями. decoct() позволяет превратить вычисленное целочисленное значение прав обратно в привычную трёхзначную строку.

Синтаксис

decoct(int $num): string
  • $num — десятичное целое число для преобразования. Если передано число с плавающей точкой, оно сначала усекается до целого.
  • Возвращаемое значение — string, содержащий восьмеричное представление. Результат является string, а не числом, поскольку восьмеричные значения обычно используются для отображения, а не в дальнейшей арифметике.

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

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

php— editable, runs on the server

Десятичное 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.

Практика

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