使用方法
- 打开页面就有一组完整结果:八进制值默认填 0o755,结果区已经给出十进制 493、二进制 111101101、权限串 rwxr-xr-x 与位权展开式,不需要先填任何东西。
- 输入框认两种前缀:ES6 与 Python 2.6 之后的 0o,以及传统 C 风格的前导 0(0755)。裸写 755 同样可以,页面按八进制处理。
- 「输出详略」默认完整,会一次给出十进制、二进制、权限串与位权展开四项;改成「仅十进制结果」则只保留换算结果一行,方便直接复制进代码。
- 在输入框里按回车立即换算,边输入边算也已开启;改动「输出详略」同样触发重算。
- 小数八进制也支持:填 0o0.1 得到 0.125,填 0o0.4 得到 0.5,小数点后第 n 位的权重是 8 的负 n 次方。
- 结果区那一行写明本次的十进制值、二进制、权限串与整数位数,并注明是否落在双精度安全整数范围内,是当场算出来的。
- 下方对照表共 20 行,默认显示 12 行,点「加载更多」看余下 8 行;「导出 CSV」保存为带字节序标记的文件,「复制对照表」复制制表符分隔文本。
- 本页不联网、不写本地存储,刷新即回到默认示例;所有位权展开与权限解读都在当前浏览器本地完成。
这个八进制转十进制转换器能解决什么
八进制在两处最常见:一处是 Unix 的 chmod 权限,另一处是二进制的紧凑写法。这两处的痛点不一样:前者是「777 到底开了哪些权限」说不清,后者是「一串 1 和 0 抄错一位」看不出来。这个八进制转十进制转换器把一次换算拆成四条互相印证的输出——十进制、二进制、权限串、位权展开——任意一条看不懂,都可以用另外三条倒推。
第一类是权限核对。看到同事给的 750,凭记忆容易把它和 755 搞混。页面直接给出 rwxr-x--- 与 rwxr-xr-x 的差别:属组那一段一个是 r-x、一个是 r-x,其他那一段一个是 ---、一个是 r-x。把它粘进变更单,比口头描述可靠得多。
第二类是调试与教学。位权展开把「为什么是这个数」写清楚:0o755 = 7×64 + 5×8 + 5×1 = 493,三个乘积摆在眼前,不需要背公式。反向核对二进制时,每 3 位二进制对应 1 位八进制,111 101 101 一眼就能看出是 7、5、5。
边界必须说清:本页的整数部分超过 17 位时会明确报错,而不是给出一个看起来正常其实已经失真的数字。这是刻意的——JS 的安全整数上限是 2 的 53 次方减 1,8 的 17 次方还在范围内,8 的 18 次方就超了,静默出错比报错危险得多。
位权展开、二进制与权限位
位权展开是换算的定义:从右往左第 i 位(i 从 0 起)的权重是 8 的 i 次方,把每一位的值乘上权重再求和。0o755 的三位分别是 7、5、5,权重是 64、8、1,于是 7×64 + 5×8 + 5×1 = 493。这个方法对任意位数都成立,只是位数多了乘积项会变长。
八进制与二进制之间有一条更省事的关系:因为 8 = 2 的 3 次方,每 3 位二进制恰好合成 1 位八进制。0o755 写成二进制是 111101101,从右往左三位一组就是 111、101、101,对应 7、5、5。这也是八进制至今还被当成二进制紧凑写法的原因——比十六进制更贴近字节以外的位分组习惯。
权限位是三位八进制的经典用法:三位从左到右分别是属主、属组、其他,每一位由 r(4)、w(2)、x(1) 三个标志相加得到。7 = 4+2+1 是 rwx,5 = 4+1 是 r-x,4 是 r--,0 是 ---。于是 755 读作 rwxr-xr-x,644 读作 rw-r--r--,600 读作 rw-------,777 读作 rwxrwxrwx,750 读作 rwxr-x---。写到第 4 位时(例如 1777)出现的是 setuid、setgid、sticky 这些特殊位,1777 里的 sticky 是 /tmp 的常见配置。
前缀写法有三种:0o 是 ES6 与 Python 2.6 之后的写法,0755 是传统 C 的写法,部分汇编里还能见到 755q。需要特别提醒的是,0755 这种前导零写法在现代 JS 的严格模式下是语法错误——ES5 的严格模式禁掉了旧的八进制字面量,因此跨语言搬运时务必带上 0o。
小数八进制按同一套规则往右延伸:小数点后第 n 位的权重是 8 的负 n 次方。于是 0o0.1 = 1/8 = 0.125,0o0.4 = 4/8 = 0.5,0o0.04 = 4/64 = 0.0625。整数部分与小数部分分开计算再相加,小数部分不参与二进制与权限串的解读。
| 变量 | 含义 | 取值 | 影响 |
|---|---|---|---|
| ip | 整数部分 | 0 ~ 7 的数字,最多 17 位 | 决定十进制整数值与二进制、权限串 |
| fp | 小数部分 | 0 ~ 7 的数字,可为空 | 按 8 的负 n 次方加权,不参与权限解读 |
| w | 位权 | 第 i 位为 8 的 i 次方 | 展开式逐项相乘求和 |
| u | 权限三段 | 属主 / 属组 / 其他 | 每段由 r(4)、w(2)、x(1) 相加 |
| lim | 安全位数 | 整数部分 17 位以内 | 超过即报精度错误,不输出失真值 |
完整示例
默认示例是 0o755。整数部分 755 的三位权重分别是 64、8、1,逐项相乘得 448、40、5,相加是 493;二进制按三位一组展开成 111101101;权限串按属主 7、属组 5、其他 5 读作 rwxr-xr-x。四条输出互相印证,任一条算错都能立刻发现。
输入 0o755 十进制 493 二进制 111101101 权限串 rwxr-xr-x(属主 rwx · 属组 r-x · 其他 r-x) 位权展开 7×64 + 5×8 + 5×1 = 493
换成 0o644,十进制变成 420、二进制 110100100、权限串 rw-r--r--;换成 0o1777,十进制是 1023、二进制 1111111111,权限串仍是 rwxrwxrwx,但多出来的第 4 位是 sticky 特殊位。填 0o0.1 这类小数时,页面会略去二进制与权限串两行,只保留十进制 0.125 与小数部分的展开,避免把「半个权限位」这种不成立的说法显示出来。
常见八进制值对照表
下表列出二十个常见八进制值:十进制、二进制、按后三位算出的权限串与一句说明。共 20 行,默认显示 12 行,点工具区的「加载更多」看余下 8 行。权限串一律按十进制值取后九位(即最后三个八进制位)解读。
| 八进制 | 十进制 | 二进制 | 权限串 | 说明 |
|---|---|---|---|---|
| 0o755 | 493 | 111101101 | rwxr-xr-x | 目录与可执行文件的常见默认值 |
| 0o644 | 420 | 110100100 | rw-r--r-- | 普通文件的常见默认值 |
| 0o600 | 384 | 110000000 | rw------- | 仅属主可读写,私钥文件常用 |
| 0o777 | 511 | 111111111 | rwxrwxrwx | 所有人可读写执行,开放且危险 |
| 0o666 | 438 | 110110110 | rw-rw-rw- | 所有人可读写但都不可执行 |
| 0o400 | 256 | 100000000 | r-------- | 只读,仅属主可见 |
| 0o700 | 448 | 111000000 | rwx------ | 仅属主有全部权限 |
| 0o750 | 488 | 111101000 | rwxr-x--- | 属主全权限,属组可读可执行 |
| 0o1777 | 1023 | 1111111111 | rwxrwxrwx | 含 sticky 特殊位,/tmp 常用 |
| 0o10 | 8 | 1000 | -----x--- | 最小的两位八进制值 |
| 0o17 | 15 | 1111 | -----xrwx | 低三位二进制全置一 |
| 0o377 | 255 | 11111111 | -wxrwxrwx | 一个字节的最大值 255 |
| 0o177777 | 65535 | 1111111111111111 | rwxrwxrwx | 16 位无符号最大值 65535 |
| 0o7777777 | 2097151 | 111111111111111111111 | rwxrwxrwx | 21 位全置一 |
| 0o0 | 0 | 0 | --------- | 全零 |
| 0o1 | 1 | 1 | --------x | 最低位置一 |
| 0o7 | 7 | 111 | ------rwx | 低三位全置一 |
| 0o70 | 56 | 111000 | ---rwx--- | 执行位整体左移一位 |
| 0o100 | 64 | 1000000 | --x------ | 等于十进制 64 |
| 0o200 | 128 | 10000000 | -w------- | 等于十进制 128 |
横向读这张表能看出来:0o377 = 255 是一个字节的上界,0o177777 = 65535 是 16 位的上界,它们都是「全 1」形态。日常最常用的是前三行——755、644、600,分别对应可执行、普通文件与私钥这三类场景。
结果边界与错误提示
- 输入为空时提示「八进制值为空:请填 0 到 7 的数字,可带 0o 或前导 0 前缀,例如 0o755」;点「开始换算」会自动填回默认示例。
- 只有前缀没有数字(例如只填 0o)时提示「只有前缀没有数字」,不按 0 处理,避免把「没填」当成「填了零」。
- 整数部分或小数部分出现 8 或 9 时,提示点名位置:「第 3 位是 8,八进制只允许 0 到 7」,位置按去掉前缀后的位数计。
- 出现其它非数字字符(字母、空格、符号)时,提示写明具体是哪个字符,并说明只允许 0 到 7、可选前缀与一个小数点。
- 出现两个及以上小数点时提示「小数点出现了 N 个,只允许一个」,不会把第二段小数悄悄忽略。
- 整数部分超过 17 位时明确报精度错误:说明 8 的 17 次方仍在双精度安全整数范围内、8 的 18 次方已超出,页面不输出十进制值,而不是给一个失真的数字。
- 填了小数部分时略去二进制与权限串两行,只给出十进制与小数展开,避免显示不成立的「半个权限位」。
- 本页不上传任何输入,也不写本地存储;导出的对照表 CSV 带字节序标记,复制结果为纯文本。
常见问题
0o 和 0755 两种写法都能用吗?
本页都能认:0o 是 ES6 与 Python 2.6 之后的写法,0755 是传统 C 的前导零写法,裸写 755 也按八进制处理。但要注意 0755 在现代 JS 的严格模式下是语法错误,ES5 严格模式禁掉了旧的八进制字面量,跨语言搬运时建议带上 0o。
为什么 755 是 rwxr-xr-x?
三位八进制分别是属主、属组、其他,每一位由 r(4)、w(2)、x(1) 相加得到。7 = 4+2+1 是 rwx,5 = 4+1 是 r-x,所以 755 读作 rwxr-xr-x:属主可读可写可执行,属组与其他只能读和执行。
17 个 7 还能算准吗?
能。17 个 7 等于 2251799813685247,小于 JS 的安全整数上限 2 的 53 次方减 1,因此落在可精确表示的范围内。整数部分到第 18 位时取值区间的上界就超过了这个上限,页面会直接报错而不是给出失真值。
为什么超过 17 位要报错而不是照算?
因为照算出来的数字看起来完全正常,但末尾几位已经被浮点舍入改掉了,用在权限位或位掩码上会静默出错。报错虽然打断了操作,却把风险暴露在你面前——静默出错比报错危险得多。
小数八进制怎么算?
小数点后第 n 位的权重是 8 的负 n 次方。0o0.1 = 1/8 = 0.125,0o0.4 = 4/8 = 0.5,0o0.04 = 4/64 = 0.0625。整数部分与小数部分分开计算再相加,小数部分不参与二进制与权限串的解读。
权限串只取后三位吗?
是的。对照表里的权限串按十进制值取后九位二进制,也就是最后三个八进制位来解读。像 1777 这样写到第 4 位的,多出来的是 setuid、setgid、sticky 这些特殊位,页面在说明列里标注,不混进九位权限串。
每 3 位二进制对应 1 位八进制有什么用?
用它可以在两种进制之间直接口算:0o755 的每一位换成三位二进制就是 111、101、101,拼起来是 111101101。反过来把二进制从右往左三位一组拆开,也能立刻读回八进制,比先转十进制再除八快得多。
导出的 CSV 带字节序标记吗?
带。对照表 CSV 导出时写入 UTF-8 字节序标记,Excel 双击不乱码;「复制对照表」是制表符分隔文本,粘进表格软件会自动分列,「复制结果」则是纯文本的多行结果。
相关工具
- 十进制转八进制转换器:反向把十进制换算成八进制。
- 二进制转十进制转换器:按二进制位权算出十进制值。
- 十进制转二进制转换器:把十进制转成二进制串。
- chmod权限计算器:按勾选的权限位反算八进制值。
- 二进制计算器:直接在二进制上做四则与位运算。