テキストを8進数に変換とは?

Text to Octal はテキストを基数8のバイト値に変換します。各文字が3桁の8進数になります。Unix パーミッションや C のエスケープシーケンスでよく見る形式です。

各 Unicode コードポイントを 0〜7 の数字で構成する 8 進数に変換します。3 桁の 8 進数で 1 バイト(000〜377)を表せるため、Unix の chmod は今もパーミッションを 8 進で書き、C や Python、シェルスクリプトでは表示できないバイトを \nnn 形式でエスケープできます。逆方向にも対応していて、8 進を貼り付ければ元の文字列に戻ります。

使い方

  1. 8進数に変換したいテキストを入力フィールドに入力または貼り付けてください。
  2. フォーマットオプションを選択します:区切り文字のスタイル(スペース、バックスラッシュプレフィックス)と先頭ゼロの有無を設定できます。
  3. 8進数出力をコピーしてスクリプトやドキュメントに使えます。逆変換モードに切り替えると8進数からテキストに戻せます。

使用するタイミング

  • C 言語の文字列リテラルに表示不能な文字を \\NNN として埋め込みたいとき。
  • 設定ファイルやログにバイトが 8 進でダンプされている内容を読み解きたいとき。
  • 非 ASCII 文字が UTF-8 で複数の 8 進トリプレットに分解される様子を説明するとき。

結果

'Hello' を入力すると '110 145 154 154 157'(空白区切り)または '\\110\\145\\154\\154\\157'(C文字列用バックスラッシュ付き)が得られます。

よくある質問

「あ」のような文字が複数の 8 進数になるのはなぜ?
ASCII 0〜127 を超える文字は UTF-8 で複数バイトに分かれます。「あ」は 3 バイト(0xE3 0x81 0x82)なので、8 進では 343 201 202 と並びます。半角英数は常に 1 バイトです。
0 埋めとなしで何が変わる?
0 埋めだと各バイトが必ず 3 桁になり(空白は 40 ではなく 040)、C の \\NNN エスケープの固定幅と一致します。0 埋めなしは短いものの、コード中で隣接する数字とくっつくと別の値に化けやすくなります。
バックスラッシュ接頭辞はどんなときに付ける?
結果をそのまま C / C++ / シェルの文字列リテラル内に貼るときに使います。\"\\110\\145\\154\\154\\157\" は Hello にコンパイルされます。付けない場合は人が読むためのバイト一覧にしかなりません。
chmod のパーミッション数字と同じ 8 進ですか?
数の表記方法は同じ 8 進ですが、chmod はビットフラグを符号化しています。各桁が所有者・グループ・その他の読み・書き・実行の 3 ビットを束ねたもので、表しているのは文字ではなく権限です。
od や hexdump の 8 進出力をそのまま貼ってデコードできる?
できます。逆変換モードに切り替えて、空白・カンマ・バックスラッシュなどで区切られた 8 進トリプレットを貼り付けてください。余計な記号は無視され、UTF-8 のマルチバイト列も含めて元のテキストを復元します。

関連ツール