テキストを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 で検証されて元のテキストが復元されます。
使い方
- 8進数に変換したいテキストを入力フィールドに入力または貼り付けてください。
- エンコード(UTF-8 バイトまたは生のコードポイント)、区切り(スペース・カンマ・ハイフン・改行)、接頭辞スタイル(なし・\NNN・0o・%)、先頭ゼロ補完を選択します。
- 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 を超える値はその場で警告され、コピペミスをすぐに直せます。