PHP decoct() 函数

定义和用法

decoct() 函数将十进制数转换为八进制字符串。

提示:如需将八进制转换为十进制,请使用 octdec() 函数。

语法

decoct(int $num): string
参数 描述
num 必需。规定要转换的十进制整数。
由于 PHP int 是有符号的,负数会按 32 位或 64 位二进制补码处理,导致八进制表示为对应无符号整数的值。

返回值

返回包含十进制数 num 的八进制表示的字符串。

PHP 版本

  • PHP 4+
  • PHP 5+
  • PHP 7+
  • PHP 8+

示例

示例 1:基本用法

<?php
echo decoct(8) . "<br>";    // 10
echo decoct(9) . "<br>";    // 11
echo decoct(15) . "<br>";   // 17
echo decoct(64) . "<br>";   // 100
?>

输出:

10
11
17
100

示例 2:处理大数

<?php
$large_num = 2147483647; // 32位最大正整数
echo "32位最大整数: $large_num<br>";
echo "八进制: " . decoct($large_num) . "<br>";

// 在64位系统上可以处理更大数值
if (PHP_INT_SIZE == 8) {
    $very_large = 9223372036854775807; // 64位最大整数
    echo "64位最大整数: $very_large<br>";
    echo "八进制: " . decoct($very_large) . "<br>";
}
?>

输出(64位系统):

32位最大整数: 2147483647
八进制: 17777777777
64位最大整数: 9223372036854775807
八进制: 777777777777777777777

示例 3:实际应用 - Linux 文件权限

<?php
// 模拟Linux文件权限的八进制表示
function permissionToString($perms) {
    $types = ['---', '--x', '-w-', '-wx', 'r--', 'r-x', 'rw-', 'rwx'];
    $user = ($perms >> 6) & 7;
    $group = ($perms >> 3) & 7;
    $other = $perms & 7;
    return $types[$user] . $types[$group] . $types[$other];
}

$filePerms = 0755; // 八进制字面量
echo "八进制权限: " . decoct($filePerms) . "<br>";
echo "符号表示: " . permissionToString($filePerms);
?>

输出:

八进制权限: 755
符号表示: rwxr-xr-x

相关函数

注意事项

重要:
  • decoct() 处理负数时,结果对应的是该负数的二进制补码的八进制表示(即无符号整数的值)。例如,在32位系统上 decoct(-1) 返回 37777777777
  • 结果字符串不含前导零,如果需要固定长度的八进制数,可以使用 str_pad() 补零。
  • 如果数字超出 PHP 整数范围,结果将不可靠。对于超大数值,可以考虑使用 GMP 扩展的 gmp_strval(gmp_init($num, 10), 8)
  • 传入非数值类型参数会导致警告(PHP 7+)或 TypeError(PHP 8+)。