使用方法
- 选择“编码”把文本转换为八进制,或选择“解码”把八进制值还原为文本。
- 输入或粘贴内容,也可以打开文件,转换文件中的字节。
- 为输出选择分隔符:空格、无、逗号或换行。
- 复制结果,或将结果下载为文件。
什么是八进制?
八进制(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.is | 102 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 个字节。