Decoct: примеры (PHP)

Использование функции decoct для работы с восьмеричной системой счисления
Раздел: Преобразование типов/форматов
decoct(int $num): string

Функция decoct в PHP

Описание и назначение

Функция decoct() преобразует десятичное число в восьмеричное представление. Она возвращает строку, содержащую восьмеричное значение переданного аргумента. Эта функция используется при работе с системами счисления, обработке прав доступа к файлам в Unix-подобных системах или при необходимости представления чисел в восьмеричном формате.

Аргументы функции

Функция принимает один обязательный параметр:

  • $num (int) - целое число, которое требуется преобразовать в восьмеричную систему. Если передано не целое число, оно будет приведено к целому типу.

Возвращаемое значение - строка, содержащая восьмеричное представление числа.

Примеры использования decoct

Базовые преобразования

Преобразование положительных десятичных чисел:

<?
echo decoct(10); // 12
echo decoct(64); // 100
echo decoct(255); // 377
?>
12
100
377
Работа с отрицательными числами
<?
echo decoct(-10); // -12
echo decoct(-64); // -100
?>
-12
-100
Автоматическое приведение типов
<?
echo decoct(15.7); // 17 (дробная часть отбрасывается)
echo decoct('42'); // 52 (строка преобразуется в число)
?>
17
52

Похожие функции в PHP

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

Конвертирует десятичное число в шестнадцатеричную систему. Часто используется в веб-разработке для работы с цветами или хешами.

base_convert()

Универсальная функция для преобразования чисел между произвольными системами счисления (от 2 до 36). Подходит для сложных преобразований между разными основаниями.

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

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

Аналоги в других языках программирования

Decoct в Python

Функция oct() возвращает восьмеричное представление числа с префиксом '0o':

print(oct(10))  # 0o12
print(oct(-10)) # -0o12
0o12
-0o12

Decoct в Javascript

Метод toString() с аргументом 8 преобразует число в восьмеричную строку:

console.log((10).toString(8));  // "12"
console.log((-10).toString(8)); // "-12"
12
-12

Decoct в MySQL

Функция OCT() возвращает восьмеричное представление числа:

SELECT OCT(10);  -- 12
SELECT OCT(-10); -- 1777777777777777777766 (отличается от PHP)
12
1777777777777777777766
Отличия от PHP

Python добавляет префикс '0o', JavaScript использует метод объекта Number, а MySQL для отрицательных чисел возвращает дополнительный код. В PHP результат для отрицательных чисел представляет собой просто восьмеричное число со знаком минус.

Типичные ошибки

Передача нечисловых значений

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

<?
echo decoct('abc'); // 0
echo decoct(array()); // 0 (с предупреждением)
?>
0
0
Потеря точности при больших числах

На 32-битных системах максимальное значение ограничено:

<?
echo decoct(2147483647); // 17777777777 (максимум)
echo decoct(2147483648); // 0 (на 32-битных системах)
?>
17777777777
0
Некорректное использование результата

Восьмеричные числа в строковом формате могут интерпретироваться неправильно:

<?
$octal = decoct(10); // "12"
// Ошибка: использование как число без явного преобразования
$result = $octal + 5;
echo $result;
?>
17 (неожиданный результат из-за автоматического приведения типов)

Изменения в последних версиях PHP

PHP 8.0

Было изменено поведение при передаче нескалярных типов. Теперь вместо предупреждения и преобразования к 0 в большинстве случаев возникает ошибка TypeError. Однако для функции decoct() сохраняется обратная совместимость - нескалярные значения преобразуются в целое число.

Предстоящие изменения

В будущих версиях PHP планируется ужесточение типизации, что может повлиять на автоматическое приведение типов в функции decoct(). Рекомендуется передавать только целочисленные значения.

Расширенные примеры использования

Работа с правами доступа к файлам

В Unix-системах права доступа часто представляются в восьмеричном формате:

Пример php
<?
$read_write_execute = 7; // 111 в двоичной
$read_write = 6;          // 110
$read_only = 4;           // 100

$permissions = ($read_write_execute * 64) + 
               ($read_write * 8) + 
               $read_only; // 764

echo 'Права доступа: ' . decoct($permissions);
?>
Права доступа: 764
Преобразование IPv4-адреса в восьмеричный формат

Иногда требуется альтернативное представление IP-адресов:

Пример php
<?
$ip = '192.168.1.1';
$parts = explode('.', $ip);
$octal_parts = array_map('decoct', $parts);
echo implode('.', $octal_parts);
?>
300.250.1.1
Генерация восьмеричных идентификаторов

Создание ID с фиксированной длиной в восьмеричной системе:

Пример php
<?
function generateOctalId($number, $length = 6) {
    $octal = decoct($number);
    return str_pad($octal, $length, '0', STR_PAD_LEFT);
}

echo generateOctalId(42, 8);
?>
00000052
Обратное преобразование из восьмеричной системы

Использование octdec() для обратного преобразования:

Пример php
<?
$octal_string = decoct(100); // "144"
$back_to_decimal = octdec($octal_string);
echo $back_to_decimal;
?>
100
Битовые операции с восьмеричными числами

Восьмеричные числа удобны для работы с группами по 3 бита:

Пример php
<?
$mask = 0777; // восьмеричная запись
$value = 0755; // восьмеричная запись
$result = $value & $mask;
echo 'Результат: ' . decoct($result);
?>
Результат: 755

PHP decoct function comments

En
Decoct Decimal to octal