文字與八進位互轉

把文字的每個位元組寫成三位八進位數,或把八進位位元組值還原為可讀文字。支援 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 個位元組。