使用方法
- 選擇「編碼」把文字轉換為八進位,或選擇「解碼」把八進位值還原為文字。
- 輸入或貼上內容,也可以開啟檔案,轉換檔案中的位元組。
- 為輸出選擇分隔符:空格、無、逗號或換行。
- 複製結果,或將結果下載為檔案。
什麼是八進位?
八進位(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 個位元組。