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

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

各文字は 8 進数に変換されます。既定では UTF-8 バイトでエンコードします——3 桁の 8 進数で 1 バイト(000〜377)を表せるので、Unix の chmod は今もパーミッションを 8 進で書き、C、Python、シェルスクリプトは表示できないバイトを \nnn 形式でエスケープできます。生のコードポイントが必要なら、コードポイントモードに切り替えると 1 文字につき 8 進数 1 個になります。どちらのモードも逆変換に対応していて、8 進を貼り付けると 0〜7 で検証されて元のテキストが復元されます。

使い方

  1. 8進数に変換したいテキストを入力フィールドに入力または貼り付けてください。
  2. エンコード(UTF-8 バイトまたは生のコードポイント)、区切り(スペース・カンマ・ハイフン・改行)、接頭辞スタイル(なし・\NNN・0o・%)、先頭ゼロ補完を選択します。
  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 埋めなしは短いものの、コード中で隣接する数字とくっつくと別の値に化けやすくなります。
接頭辞スタイル(\110・0o110・%110)は何のため?
各八進数値を包んでコードへそのまま貼れるようにします。バックスラッシュ(\110\145…)は C / C++ / シェルの文字列リテラルに収まり、コンパイルすると元のテキストに戻ります。0o110 は Python と JavaScript でそのまま動く八進リテラルです。%110 はパーセント表記で、URL エンコード値との突き合わせに便利です。None のままなら、人が読むための素の数値一覧になります。
chmod のパーミッション数字と同じ 8 進ですか?
数の表記方法は同じ 8 進ですが、chmod はビットフラグを符号化しています。各桁が所有者・グループ・その他の読み・書き・実行の 3 ビットを束ねたもので、表しているのは文字ではなく権限です。
od や hexdump の 8 進出力をそのまま貼ってデコードできる?
できます。逆変換モードに切り替えて、スペース・カンマ・改行・バックスラッシュなどで区切られた 8 進トリプレットを貼り付けてください。UTF-8 のマルチバイト列も含めて元のテキストを復元します。数字 8 や 9 を含むグループ、または UTF-8 モードで 0377 を超える値はその場で警告され、コピペミスをすぐに直せます。

関連ツール