テキストを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 進を貼り付ければ元の文字列に戻ります。
使い方
- 8進数に変換したいテキストを入力フィールドに入力または貼り付けてください。
- フォーマットオプションを選択します:区切り文字のスタイル(スペース、バックスラッシュプレフィックス)と先頭ゼロの有無を設定できます。
- 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 のマルチバイト列も含めて元のテキストを復元します。