テキスト ↔ 16進数変換
ブラウザ上でそのまま、テキストを16進数に、16進数をテキストに変換できます。UTF-8 に完全対応しているため、すべての文字が正しくエンコードされます。出力は小文字か大文字か、スペース区切りか連続バイトかを選べます。
大文字・小文字
区切り
上にデータを入力すると、変換結果がここに表示されます。
テキスト ↔ 16進数変換 の使い方
- 1
変換方向を選ぶ
トグルで「テキスト → 16進数」または「16進数 → テキスト」を選びます。入れ替えボタンを押すと結果が入力欄に移動し、逆方向に変換し直せます。
- 2
データを入力する
テキストを入力または貼り付けるか、16進数の文字列を貼り付けます。入力すると同時に変換が自動的に実行され、UTF-8 完全対応であらゆる文字を扱えます。
- 3
形式を選ぶ
16進数出力では、桁を小文字にするか大文字にするかを選び、バイトごとにスペースを入れるか連続したストリームにするかを指定できます。デコード時はスペース・カンマ・コロンがすべて任意です。
- 4
結果をコピーする
変換された結果を確認してクリップボードにコピーすれば、必要な場所にすぐ貼り付けられます。
テキストから16進数へ:完全ガイド
16進数とは何か
16進数は、ふつう hex と略され、基数16の数体系です。10進数が10個の数字記号を、2進数が2個を使うのに対し、16進数は16個を使います。0 から 9 の数字で 0 から 9 の値を、続いて A から F の文字で 10 から 15 の値を表します。つまり A は 10、B は 11、C は 12、D は 13、E は 14、F は 15 です。大文字・小文字は値を変えないので、0xff と 0xFF は同じ数です。
16進数は、2進数を表すプログラマーの略記法です。各16進数の桁はちょうど4ビットに対応します。4ビットは16通りの値をもてるからで、そのため2桁の16進数は8ビットのバイト1つをぴたりと表せます。このきれいな対応こそ、バイトが1と0の長い並びではなく、ほぼ常に16進数で書かれる理由です——その方がはるかにコンパクトで、はるかに読みやすいのです。
1バイトにつき16進数2桁
バイトは8ビットで、0 から 255 までの任意の値をもてます。16進数では、その範囲はちょうど2桁、00 から FF までで書かれ、FF は 255 に等しくなります。左の桁は上位4ビットを表し、重みは16、右の桁は下位4ビットを表し、重みは1です。バイトの値を求めるには、左の桁に 16 を掛け、右の桁を足します。
このツールは常に各バイトを2桁の16進数の組として書き、必要なときは先頭にゼロを補うので、値が 5 のバイトは単なる 5 ではなく 05 と表示されます。固定の2桁幅を保つことで、バイトがそろい、16進数のダンプを曖昧さなく読めます。桁は小文字でも大文字でも表示でき、バイトをスペースで区切ることも、つなげることもできます。
文字から16進数へ、ステップごとに
文字を16進数に変換するのは2つのステップです。そのバイト値を求め、次にその値を基数16で書きます。ASCII 文字では、バイト値はおなじみのコードポイントです。大文字の A は10進数で 65 です。65 を16進数に変換するには、16 で割ります。65 は 16 の4倍(つまり 64)に余り 1 なので、上位の桁は 4、下位の桁は 1 となり、0x41 になります。
だからこそ A = 0x41 は、コンピューティングで最もよく知られた値のひとつなのです。同じ方法で、小文字の a、コード 97 は 0x61(16 の6倍は 96、余り 1)になり、スペース文字、コード 32 は 0x20(16 の2倍は 32、余り 0)になります。逆に進むには、最初の16進数の桁に 16 を掛けて2つ目を足せば10進数のコードが復元され、それから文字を調べます。
実例:「Hex」をエンコードする
H、e、x の3つの文字を変換に通してみましょう。H はコード 72 です。16 で割ると 4 余り 8 なので、0x48 です。文字 e はコード 101 です。これは 16 の6倍(96)に余り 5 なので、0x65 です。文字 x はコード 120 です。これは 16 の7倍(112)に余り 8 なので、0x78 です。
スペース区切りの大文字ダンプとして書くと、「Hex」という単語は 48 65 78 になります。区切りなしの小文字では 486578 です。デコードはこの算術を逆にたどります。48 は 16 の4倍に 8 を足したもので 72、つまり H、65 は 101 で e、78 は 120 で x——もとの単語が復元されます。
ASCII と UTF-8、そしてマルチバイト文字
1文字が2桁という規則がきれいに当てはまるのは、もとの ASCII セット、すなわちコードポイント 0 から 127 だけです。それを超えるすべて——アクセント付き文字、ラテン文字以外の文字、記号、絵文字——については、このツールは可変幅である UTF-8 を使います。ASCII 文字は1バイト、したがって16進数の組1つですが、他の文字は2バイト、3バイト、または4バイトを使い、したがって16進数の組が2つ、3つ、または4つになります。
たとえばアクセント付きの é は、UTF-8 の 0xC3 と 0xA9 の2バイトなので、1組ではなく C3 A9 という16進数に変換されます。一般的な絵文字は4バイトで、16進数の組が4つになります。これが、英語以外のテキストが目に見える文字数よりも多くの16進数を生み出す理由であり、文字数ではなくバイト数を数えているときに覚えておく価値のあることです。
柔軟なデコード
「16進数 → テキスト」の方向では、入力を2桁ずつ読み取り、書式に対して意図的に寛容です。バイト間のスペース・カンマ・コロンはすべて無視されるので、486578 のような区切りのない並び、48 65 78 のようなスペース区切りのダンプ、48:65:78 のようなコロン区切りのダンプは、いずれも同じ単語にデコードされます。小文字と大文字の桁は、どのように混在していても受け付けられます。
それでも2つの規則は守られなければなりません。入力に含められるのは有効な16進数の文字(0-9 と A-F、それに無視される区切り)だけであること、そして16進数の桁数は偶数でなければならないこと、です。各バイトにはちょうど2桁が必要だからです。変換エラーは、ほぼ必ず、16進数以外の文字が紛れ込んだか、桁数が奇数になった——おそらくあるバイトから桁が1つ欠けている——ことを意味します。それを直せば、デコードは完了します。
16進数が使われる場面
16進数は、プログラミングやデバッグのいたるところにあります。メモリアドレス、バイトオフセット、生のデータダンプは16進数で示されます。2桁がバイトにとてもきれいに対応するからです。16進数エディタでファイルやネットワークパケットを調べるとき、あなたはまさにこのツールが生み出すような出力を読んでいます。16進数は、ハッシュや UUID のような2進数の識別子をコンパクトに表すためにも使われます。
バイトダンプ以外でも、16進数を目にしたことがあるでしょう。CSS やデザインツールは、色を #FF8800 のような16進数の3つ組として書き、各組が赤・緑・青の強さを 00 から FF で表します。多くの言語の文字エスケープは16進数を使い、文字 A を意味する \x41 がその例です。テキストを16進数に変換することは、文字列の背後にある正確なバイト値を調べたり、エンコーディングを確認したり、16進数を期待する場面のためにデータを準備したりする、手軽な方法です。
よくある質問
テキストはどのように16進数へ変換されますか?
絵文字や英語以外のテキストにも対応していますか?
デコーダーはどのような16進数形式に対応していますか?
変換エラーが出るのはなぜですか?
入力したデータはサーバーに送信されますか?
関連ツール
こちらの便利なツールもどうぞ