decoct(int $num): string
| 参数 | 描述 |
|---|---|
num |
必需。规定要转换的十进制整数。 由于 PHP int 是有符号的,负数会按 32 位或 64 位二进制补码处理,导致八进制表示为对应无符号整数的值。 |
返回包含十进制数 num 的八进制表示的字符串。
<?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
<?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
<?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() 补零。gmp_strval(gmp_init($num, 10), 8)。