二进制转八进制转换器

二进制

八进制仍然活跃在 Unix 文件权限(chmod 755)、旧 PDP 时代的手册,以及少数单片机工具链中。这个转换器会从右侧开始每三位一组处理任意二进制字符串,并将每组映射为 0 到 7 的八进制数字 — 还可选择前导零,用于把 0755 当作八进制字面量的语言。

如何将二进制转为八进制

  1. 1

    输入二进制值

    空格会被移除。任意长度都可以;最左侧的分组会自动用前导零补足到三位。

  2. 2

    从右侧开始每三位分组

    `111101100` 会变成 `111 101 100`。分组方向很重要 — 始终从右到左。

  3. 3

    映射每一组三位

    000 = 0,001 = 1,010 = 2,一直到 111 = 7。每一组三位正好映射到一个八进制数字。

  4. 4

    读取并复制结果

    可选择纯数字(`754`)、带前导零(`0754`)或带 `0o` 前缀(`0o754`),以兼容 Python 3 和 Rust。

三位与八进制对照表

二进制 八进制
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

示例:Unix 权限

rwxr-xr-x 表示所有者拥有读/写/执行权限,所属组和其他用户拥有读/执行权限。用二进制表示就是 111 101 101,可直接分组为八进制 755 — 也就是传给 chmod 的确切数字。

八进制什么时候有用

  • 文件权限chmod 644umask 022stat -c %a 都用八进制表示。
  • 转义序列:C 中的 \100@ 的八进制(十进制 64)。
  • 旧机器码:PDP-8、PDP-11 和早期 DEC 文档用八进制列出操作码,因为它们的字长是 3 位的倍数。
  • 视觉清晰:三位分组比二进制读得更快,又不像十六进制那样引入完整的字母表。

常见坑

  • C 中前导零表示八进制0755 是八进制 755(= 十进制 493),755 是十进制 755。粘贴前请检查你所用语言的规则。
  • JavaScript 移除了旧式八进制:严格模式会拒绝 0755。请改用 0o755
  • 分组方向:如果从左到右分组,任何长度不是 3 的倍数的位序列都会得到错误答案。

常见问题

因为权限标志正好按每个角色(所有者、所属组、其他用户)三项(读、写、执行)分组。每一组三位一对一映射到一个八进制数字,所以 rwxr-xr-x 一步就能读作 755

C、Perl 和各种 shell 使用前导 0。Python 3、Rust 和 Swift 使用 0o。命令行上的 chmod 不使用前缀。

负数需要有符号位宽(补码)。请先指定位宽;否则转换器会把所有输入当作无符号处理。

不需要。转换器会把最左侧的分组用前导零补足到三位。1111 会变成 001 111,也就是八进制 17

相关工具