文本与八进制互转

把文本的每个字节写成三位八进制数,或把八进制字节值还原为可读文本。支持 UTF-8 及多种传统字符集。

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 选择“编码”把文本转换为八进制,或选择“解码”把八进制值还原为文本。
  2. 输入或粘贴内容,也可以打开文件,转换文件中的字节。
  3. 为输出选择分隔符:空格、无、逗号或换行。
  4. 复制结果,或将结果下载为文件。

什么是八进制?

八进制(Base8)只使用 0 到 7 这八个数字,每一位正好对应 3 个二进制位。早期一些计算机的字长是 3 的倍数,例如 12 位的 PDP-8 和 36 位的 PDP-10,因此八进制曾经非常流行。如今它主要出现在转义序列和 Unix 文件权限中。

一个字节的取值范围是 0 到 255,换成八进制就是 0 到 377。本工具把每个字节固定写成三位八进制数并补足前导零,所有分组宽度一致,即使不加分隔符也能还原。文本会先按所选的文本编码转换为字节:纯 ASCII 每个字符 1 个字节,其他文字在 UTF-8 中每个字符占 2 到 4 个字节。

八进制转义序列

在 C、C++、Python、Perl 以及 shell 的 printf 中,可以用反斜杠加最多三位八进制数字表示一个字节,例如 \101 表示字母 A,\012 表示换行符。

本工具输出的是不带反斜杠的纯数字。如果要生成转义字符串,可以把以空格分隔的结果中的空格替换为反斜杠,并在第一组前面补一个。解码转义序列时则反过来,先把反斜杠替换为空格,因为解码器只接受数字和分隔符。

755 这样的文件权限也是八进制,但它是一个数字而不是文本。若要把这类数字转换为二进制或十进制,请使用进制转换器。

在代码中使用八进制

# Python
' '.join(f'{b:03o}' for b in 'Hi'.encode())            # '110 151'
bytes(int(o, 8) for o in '110 151'.split()).decode()   # 'Hi'

# Shell
printf '\110\151\n'        # 输出 Hi
printf 'Hi' | od -An -to1   # 110 151

编码规格

字母表0-7
输出体积每字节 3 位数字(300%)
填充无
标准八进制位值表示
区分大小写否

编码示例

输入 (UTF-8)输出
Hello, World!110 145 154 154 157 054 040 127 157 162 154 144 041
Base64.is102 141 163 145 066 064 056 151 163
你好344 275 240 345 245 275

常见问题

为什么每个字节都是三位八进制数?

最大的字节值 255 在八进制中是 377,所以三位数字总是够用。较小的值用前导零补齐,可以让每组宽度相同,这样不带分隔符的字符串也能被正确切分回字节。

没有空格的八进制如何解码?

直接粘贴连续的数字串即可,解码器会每三位切分一次,因此长度必须是 3 的倍数。如果某些值不足三位,请改用空格、逗号或换行分隔。

为什么 400 这样的值会报错?

八进制 400 等于 256,超出了一个字节的范围。有效的字节值是 0 到 377,超出范围的分组会连同位置一起报错。数字 8 和 9 本身也不是合法的八进制数字。

可以按其他字符集得到八进制值吗?

可以。在“文本编码”中选择对应的字符集即可,例如中文可选 GBK 或 Big5,Windows-1252 或 ISO-8859-1 则让每个西欧字符只占 1 个字节。