二进制转八进制转换器

二进制

八进制仍然活跃在 Unix 文件权限(chmod 755)、旧 PDP 时代的手册,以及少数单片机工具链中。这个转换器会从右侧开始每三位一组处理任意二进制字符串,并将每组映射为 0 到 7 的八进制数字。输出是不带前缀的普通八进制数字;如果目标语言要求前导零(0755)或 0o 前缀(0o755),请自行添加。

如何将二进制转为八进制

  1. 1

    输入二进制值

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

  2. 2

    从右侧开始每三位分组

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

  3. 3

    映射每一组三位

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

  4. 4

    读取并复制结果

    结果是 `754` 这样的普通八进制数字,不带前缀。如果目标语言需要前导零(`0754`)或 `0o` 前缀(`0o754`),请自行添加。

三位与八进制对照表

二进制 八进制
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

相关工具

此工具还提供其他语言版本