テキストから16進数への変換ツール

→
テキスト → UTF-8のバイト列 → 1バイトを16進数2桁で表し、空白で区切る

テキストから16進数へ:トレースの中でバイトが見せる顔

この変換でわかること

テキストをUTF-8で符号化し、各バイトを2桁の16進数として出力します。これはパケットキャプチャやメモリビューア、プロトコルのログで使われる表記そのものなので、この変換は人が打ち込む文字とツールが表示する値の間の翻訳だと言えます。

1バイトは必ず2桁

1バイトが持てる値は0から255までで、16進数の2桁はちょうどその範囲を00からFFまで覆います。この対応は決して崩れないため、16進ダンプは目で追えます。2桁を数えればバイト数が分かり、左端のオフセット欄が今どの位置を見ているかを教えてくれます。

テキストと16進数の変換表

短い文字列とその16進数のバイト値です。記号や数字はASCIIの値として1組に収まり、ラテン文字の外側にある文字は複数の組に広がります。

テキスト16進数
A41
Hi48 69
OK4F 4B
12331 32 33
!21
Go47 6F

キャプチャの中から文字列を探す

パケットキャプチャを読める文字列で検索しても、うまくいかないことがほとんどです。回線を流れているのはバイトで、打ち込んだのは文字だからです。探したい文字列を16進数にしておけば、検索すべき並びがそのまま得られます。アクセント付きの名前で検索が失敗し、外した検索が成功する理由も、符号化された長さが違う点にあります。

区切り文字に注意する

本ツールは読みやすさのためバイトを空白で区切りますが、キャプチャやURLでは桁が連続していたりパーセント記号が使われたりします。検索するときは空白を取り除くか、使うツールの区切りに合わせてください。見た目が同じでも、隙間のせいだけで一致しないことがあります。

よくある質問

テキストから16進数へ手で変換するには?

各文字のUTF-8のバイト値を調べ、2桁の16進数として書きます。Hiなら48と69です。ASCIIの範囲外の文字は符号位置ではなくバイト値が必要で、1文字が複数のバイトになることがあります。

16進数の出力と2進数の出力は何が違いますか?

表記以外に違いはありません。どちらも同じUTF-8のバイト列を表しており、16進数は1バイトを2桁、2進数は8桁で書きます。16進数は4分の1の長さで読みやすく、個々のビットを見たいときだけ2進数が向いています。

アクセント付きの文字が2バイトになるのはなぜですか?

UTF-8は元のASCIIの範囲より上の文字を複数バイトで表し、アクセント付きのラテン文字は多くが2バイトになります。これは破損ではなく正常な結果で、1バイトで届く範囲の外にあるというだけのことです。

URLの符号化と同じものですか?

近いですが同一ではありません。パーセントエンコードはUTF-8のバイト列の各2桁の前にパーセント記号を付けたもので、バイト値は本ツールと完全に一致し、違うのは記号だけです。ここで16進数にすれば、そのまま変換できるバイト列が得られます。

出力をバイト配列のリテラルに使えますか?

使えます。並んでいるのはバイト値そのものなので、各2桁に0xを付ければ多くのプログラミング言語のリテラルになります。本ツールは慣習に合わせて大文字で出力しますが、貼り付ける先では小文字でも同じ値として扱われます。

以下のコードをコピーしてご自身のウェブサイトに貼り付けると、この変換ツールを追加できます。

<!-- テキストから16進数 -->
<iframe src="https://unitflow.net/ja/embed/text-to-hex" title="テキストから16進数" width="100%" height="420" loading="lazy" style="border:0;max-width:100%;display:block"></iframe>
<p><a href="https://unitflow.net/ja/text-to-hex" target="_blank" rel="noopener">UnitFlow 提供</a></p>