テキストを8進数に変換

8進数は16進数の忘れられた親戚で、各桁がちょうど3ビットを表す基数8の記数法です。Unixのファイル権限(755、644)は8進数で書かれ、すべての文字は10進数や16進数と同じように8進数コードを持ちます。テキストを貼り付けると、この変換ツールが各バイトの8進数コードを返します。スペースで区切った8進数コードを貼り付ければ、元のテキストに戻せます。

テキストを8進数に変換する方法

  1. 1

    テキストを入力する

    通常の文字。ASCII以外の入力にはUTF-8エンコーディングを前提とします。

  2. 2

    各バイトが1つの8進数コードになる

    `A` = 10進数の65 = 8進数の`101`。`Z` = 90 = `132`。スペース = 32 = `40`。

  3. 3

    コードはスペースで区切られる

    バイトのコードは半角スペース1つでつながれます(`Hi`は`110 151`になります)。先頭のゼロは付きません。

  4. 4

    8進数を貼り付けて復号する

    「8進数 → テキスト」に切り替え、スペースで区切った8進数の値を貼り付けます。0から255までの各値が1バイトになります。

8進数の簡単な例

文字 10進数 8進数 2進数
A 65 101 1000001
a 97 141 1100001
0 48 60 0110000
スペース 32 40 0100000
\n 10 12 0001010

8進数が今も重要な理由

ほとんどの現代のシステムは16進数を好みます。16進数2桁がちょうど1バイトにきれいに対応するからです。それでも8進数はいくつかの場面で残っています。

  • Unixのファイル権限:chmod 755は所有者 = 7(rwx)、グループ = 5(r-x)、その他 = 5(r-x)を意味します。各桁が3つの権限ビットを表します。
  • C/Pythonのエスケープシーケンス:文字列リテラル内の\101はAです。C言語の整数リテラルの先頭のゼロ(int x = 0755)は8進数として解釈され、よく知られた落とし穴です。
  • 組み込みシステムやレトロシステム:古い12ビット、18ビット、36ビットのアーキテクチャは8進数とよく合っていました。
  • umask値:umask 022は既定のファイル権限マスクを755に設定します。

ファイル権限の表

8進数の桁 権限 2進数
0 --- 000
1 --x 001
2 -w- 010
3 -wx 011
4 r-- 100
5 r-x 101
6 rw- 110
7 rwx 111

つまりchmod 644は所有者 rw-、グループ r--、その他 r--で、読み取り可能なテキストファイルの既定値です。

落とし穴

  • C言語では先頭のゼロが重要です。int a = 010;はaを10ではなく8に設定します。Python 3ではこれが廃止されたので、常に0o10を使ってください。
  • 8進数は0〜7の数字だけを使います。8と9は8進数では無効です。これらが見えたら、その元データは8進数ではありません。
  • Unicodeのバイトは8進数で大きくなります。UTF-8の絵文字(4バイト)は3桁の8進数コード4つ、つまり12文字になります。16進数なら8文字です。表示用途のほとんどでは16進数が有利です。

よくある質問

ほとんどの場合は使いません。Unixの権限や\NNN形式を使うC文字列のエスケープを扱うときくらいです。16進数のほうがコンパクトで、バイト単位で読みやすいです。

各8進数の桁が3つの権限ビット(読み取り、書き込み、実行)にちょうど対応するからです。この表記は1971年にAT&T Unixに組み込まれて以来ずっと使われており、基盤となるビットパターンにうまく対応します。

はい。「8進数 → テキスト」に切り替え、スペースで区切った8進数の値(例:110 151)を貼り付けてください。0から255までの各値が1バイトに戻るため、マルチバイトのUTF-8文字も個々のバイトコードから復号できます。

テキストは変換を行うためだけに当社のサーバーへ送信され、保存もログ記録もされません。

関連ツール

このツールは他の言語でも利用できます