Octdec: примеры (PHP)
octdec(string $octal_string): int|floatФункция octdec() преобразует строковое представление восьмеричного числа в его десятичный эквивалент. Она применяется при работе с числовыми данными, записанными в восьмеричной системе счисления, например, при обработке прав доступа к файлам в UNIX-системах или специализированных форматах данных.
- octal_string (обязательный): строка, представляющая восьмеричное число. Она может содержать только символы цифр от 0 до 7. Функция игнорирует любые посторонние символы, но преобразование останавливается при первом недопустимом символе.
Функция возвращает десятичное число типа int или float, в зависимости от размера значения.
<?php
echo octdec('10'); // Преобразование числа 10 в восьмеричной системе
?>8
<?php
echo octdec('777'); // Восьмеричное 777 соответствует десятичному 511
?>511
<?php
// Функция игнорирует недопустимые символы, начиная с них
echo octdec('12345abc'); // Преобразует только '12345' (восьмеричное)
?>5349
bindec() — преобразует двоичную строку в десятичное число. Используется для работы с бинарными данными.
hexdec() — преобразует шестнадцатеричную строку в десятичное число. Подходит для обработки цветов, хешей и других шестнадцатеричных значений.
base_convert() — конвертирует числа между произвольными системами счисления (от 2 до 36). Это универсальная альтернатива, когда требуется гибкость.
Octdec в Python
print(int('10', 8)) # Указание основания системы счисления8
Octdec в Javascript
console.log(parseInt('10', 8)); // Аналогичное указание основания8
Octdec в MySQL
SELECT CONV('10', 8, 10); -- CONV(число, из_основания, в_основание)8
Основное отличие PHP-функции — она предназначена только для восьмеричной системы, тогда как в других языках часто используются универсальные методы с параметром основания.
Недопустимые символы: функция прекращает преобразование при встрече символов не из диапазона 0-7.
<?php
echo octdec('89'); // '8' не является восьмеричной цифрой, преобразуется только '8'
?>0
Переполнение целочисленного типа: для больших чисел результат может выходить за пределы int, возвращая float.
<?php
var_dump(octdec('17777777777')); // Число превышает размер int на 32-битных системах
?>float(2147483647)
В PHP 8.0 поведение функции octdec() было уточнено: теперь она корректно обрабатывает входные данные, строго следуя остановке на первом недопустимом символе. Ранее в некоторых случаях могли возникать неявные преобразования.
Начиная с PHP 7.4, выдача предупреждений для недопустимых символов стала более последовательной.
<?php
$perms = '0755'; // Строка с ведущим нулём (восьмеричное представление)
$decimal = octdec(substr($perms, 1)); // Убираем ведущий нуль для octdec
echo $decimal; // Десятичное представление прав доступа
?>493
<?php
// Восьмеричное число, соответствующее максимальному 32-битному целому со знаком
$large = octdec('17777777777');
var_dump($large);
?>float(2147483647)
<?php
$octals = ['12', '7', '20'];
$decimals = array_map('octdec', $octals);
print_r($decimals);
?>Array
(
[0] => 10
[1] => 7
[2] => 16
)<?php
$oct = '77';
echo octdec($oct) . ' ' . base_convert($oct, 8, 10); // Одинаковый результат
?>63 63