八进制转十进制转换器

→
十进制 = 每一位八进制 × 8 的位权,再全部相加

八进制转十进制:解读一个模式、掩码或老转储

这个换算在做什么

它把一个 8 进制值读出来,再用 10 进制复述。当模式已经写成八进制——chmod 和 ls 期望的那种——而这个数字又要进入脚本、配置项或一处默认按十进制理解的比较时,你需要的就是这个方向。

每一位都是 8 的幂

从右往左,权值依次是 1、8、64、512 等等。把 755 转换一下得到 7 × 64 + 5 × 8 + 5 = 493。要注意一旦变成十进制,这三位数字就不再是三项独立权限了:让八进制形式可读的那种打包结构,恰恰会被十进制转换溶解掉,用这个结果之前值得先想清楚这一点。

八进制转十进制对照表

八进制模式与掩码及其十进制值。把权限模式转成十进制对写脚本有用;读的时候还是八进制更好,所以多数团队两者都记。

八进制十进制
00
11
77
108
1715
10064
377255
644420
755493
1000512

八进制的用武之地为何收窄到权限

一个进制能站稳脚跟,靠的是和机器的分组方式对得上。八进制契合早期硬件的六位和十二位字长,而 8 位字节一旦普及,自然的分组方式就变成了四位,也就是十六进制。权限之所以幸存,是因为它确实是九位宽,能均匀切成三组三位——进制本身的算术依然和数据结构的形状吻合。

不要在十进制里做权限运算

把十进制的 493 和 64 相加来授予读权限,看起来合理,其实是错的:64 是十进制六十四,它在八进制模式里置起的那一位并不是你想要的读位。权限运算请在八进制里做,用 400、40 这样的值,只在存储或显示时才转换。

常见问题

怎样手算八进制转十进制?

把每一位乘以它的位权——从右往左是 1、8、64、512 等等——再把结果相加。755 就是 7 × 64 + 5 × 8 + 5,等于 448 + 40 + 5,也就是 493。

为什么 chmod 755 在我的脚本里显示成 493?

因为脚本把模式当成普通的十进制整数来读了。文件系统存的位在两种写法下完全一样,不同的只是记法。把八进制形式留在脑子里和注释里,只在数值与期待十进制的代码交界处做一次转换。

这里能转换的最大八进制值是多少?

远大于任何现实的模式或掩码。转换使用精确整数运算,所以很长的输入也能每一位都正确,而不是浮点计算器那种舍入后的结果。

八进制里的前导零有含义吗?

数值上没有——0755 和 755 是同一个值——但它是一个有用的标记,说明“这是八进制”,而且好几种语言要求用它来表示八进制字面量。转换器接受输入中的前导零和 0o 前缀,输出时则不会打印。

工具接受八进制小数吗?

接受,而且无法表示时会如实报告。有些八进制小数能终止,有些不能,取决于分母是不是 2 的幂。展开不能终止时结果会被截断并明确标注,而不是当作精确值来四舍五入。

复制下面的代码并粘贴到您的网站,即可添加此换算器。

<!-- 八进制转十进制 -->
<iframe src="https://unitflow.net/zh/embed/octal-to-decimal" title="八进制转十进制" width="100%" height="420" loading="lazy" style="border:0;max-width:100%;display:block"></iframe>
<p><a href="https://unitflow.net/zh/octal-to-decimal" target="_blank" rel="noopener">由 UnitFlow 提供</a></p>