16 進にエンコード

テキストを貼り付けて、それがどんなバイトでできているかを読んでください。1 バイトあたり 16 進 2 桁、区切りは書き込む先に合わせて選べます。ダンプなら空白、証明書のフィンガープリントならコロン、データベースの項目なら区切りなし。常に UTF-8 として符号化するので、ひらがな 1 文字が 3 バイトになります。

結果

入力すると、ここに答えが出ます。

  • 処理される場所

    ファイルがないので、何もアップロードされません。計算はこのページの中で行われます。

  • 順番待ちもアカウントもなし

    お使いの機械の速さで答え、あなたが誰かを尋ねることはありません。

  • 何度でも

    回数は数えず、上限もありません。もう一度答えることに費用はかからないからです。

仕組み

  1. テキストを貼り付けてください。
  2. 相手が期待する形に合わせて、区切りと桁の表記を選びます。
  3. バイト列をコピーします。テキストは端末から出ていません。

1 バイトは 2 桁、1 文字はそうとは限りません

16 進はバイトを書く形式で、1 バイトはちょうど 256 通り、つまり 16 進 2 桁です。だから出力の桁数は常に偶数になります。奇数の長さは、途中で何かが失われた確かな印です。

一方、1 文字は必ずしも 1 バイトではありません。`a` は 1 バイト、ひらがなも漢字も 3 バイト、絵文字は 4 バイトです。テキストのバイト長を知りたい人はここで直接見られます。日本語では、項目の上限を決めるときに使った文字数の 3 倍近くになることがよくあります。

なぜ常に UTF-8 なのか

テキストは文字の並びで、バイトになるのは文字コードを通したときだけです。「このテキストのバイト列は何か」という問いは、どの文字コードかを言うまで未完成です。ここでは UTF-8 です。ウェブ、Linux、macOS、JSON、そして現代のほぼすべてのプロトコルがそこに固定されているからです。

別のものが絡む場所——古い Windows のコードページ、データベースの列の Shift_JIS——ではバイトが変わり、変わるのはちょうど ASCII を超えた文字です。「あ」は UTF-8 で `e3 81 82`、Shift_JIS では `82 a0`、EUC-JP では `a4 a2` です。Shift_JIS の 2 バイト目が ASCII と重なることが、いわゆるダメ文字の正体でもあります。「表」は `95 5c` で、2 バイト目の `5c` は円記号でありバックスラッシュです。値が合わないなら、まずここを見てください。

区切りは好みの問題ではありません

バイトのあいだのコロンは、OpenSSL が証明書のフィンガープリントを印字する形であり、MAC アドレスが読まれる形です。空白は 16 進ダンプの形で、`xxd` やパケットキャプチャが見せるものです。区切りなしは、データベースの項目、設定の 1 行、ハッシュの比較に入る形です。

実務では、選択は見た目ではなく値の行き先で決まります。2 つのフィンガープリントの比較は、片方がコロン付きで書かれ、もう片方がそうでないというだけで驚くほど頻繁に失敗します。バイトは同じで、文字列は同じではありません。

大文字か小文字か、そしてどこで効くか

バイトの値としては桁の表記はどうでもよいことです。`ff` と `FF` は同じ数です。テキストの比較としては話が変わるので、値が比較されるか、ハッシュされるか、キーとして使われた瞬間に、この問いは化粧ではなくなります。

慣習は一様ではありません。Unix の道具とほとんどのライブラリは小文字で書き、Windows の道具と多くの証明書の表示は大文字で書き、MAC アドレスは製造元によって両方です。比較する人は先に正規化してください。署名を計算する人は、仕様がどちらを求めるかを知らなければなりません。違えばハッシュが別物になります。

見えない文字を覗く

テキストを 16 進で見る最も真剣な理由は、2 つの値が同じに見えるのに比較が失敗することです。バイトの表示は、画面が隠しているものを即座に見せます。全角スペースの `e3 80 80`、Windows の行末の `0a` の前にある `0d`、空白のはずのところにあるタブの `09`。

同じくらい多いのが先頭の `ef bb bf` です。Excel や Windows の一部のエディターがファイルの先頭に置く BOM で、目に見えず、内容の一部であり、CSV の 1 列目の名前をどのプログラムも認識しないことがある理由です。

2 つのシステムを分ける行末

Windows は行を `0d 0a` で終え、Unix と macOS は `0a` で終えます。画面では同じに見え、バイトでは違います。だから「同じ」2 つのファイルのチェックサムが食い違い、バージョン管理が手つかずの行に変更を出し、当たり前だと思っていた比較が失敗します。

このページでは直接見えます。改行を含むテキストを貼り付けて、`0a` の前に `0d` があるかどうかを見てください。処理の鎖のどれかが行末を書き換えたかどうかを解く最も速い方法です。Git は設定次第で明示的にそれを行います。

16 進と Base64 は別のことを解きます

どちらもバイトを印字可能なテキストとして書き、選ぶことは可読性と大きさのどちらを取るかを選ぶことです。16 進は 1 バイトに 2 文字、つまり 2 倍の場所が要ります。Base64 は生のデータより約 3 分の 1 増えるだけで、はるかに経済的です。

引き換えに、16 進は読めます。特定の位置の特定のバイトを見られ、2 つの値を並べて最初の差を見つけられ、バイトの境目が見えます。Base64 ではどれもできません。3 バイトが 4 文字に溶けるからです。だからハッシュとフィンガープリントは 16 進が普通で、実データは Base64 が普通です。

`0x` の意味と、置く場所

`0x` の接頭辞はプログラミング言語の慣習で、続く桁を 16 進として読めとコンパイラーに伝えます。コードの中の単独の数値の前に置くのであって、並びの各バイトの前ではありません。`0x48 0x61` は 2 つの数値の並び、`4861` は 2 バイトです。

だからここでは接頭辞を出しません。逆方向はもっと寛大です。このサイトのデコーダーは各バイトの前の `0x` を受け付けます。ソースコードからコピーしたそういう並びが実際に届くからです。生成と受け入れは違ってよく、ここでは意図的に違えています。

個人情報保護法から見たときの位置

この欄に入るのは、たいてい動かしたくない値です。挙動のおかしいログの項目、鍵、チェックサムと突き合わせたいパスワードの候補。変換はページの中で行われるので、当方への提供は起きません。

ネットワークパネルで確認できます。使っているあいだ、入力を運ぶリクエストは出ません。残るものはプライバシーポリシーにあります——訪問と、広告および分析のリクエスト。欄の中身はそこに含まれず、この種の値については、それが唯一重要な点です。

16 進にエンコード:よくある質問

ひらがなが 3 バイトになるのはなぜですか。

UTF-8 が ASCII を超える文字を複数バイトで書くからです。ひらがなと漢字は 3 バイト、絵文字は 4 バイトです。「あ」は e3 81 82 で、Shift_JIS なら 82 a0 の 2 バイトでした。

どの区切りが正しいですか。

相手が読む形です。証明書のフィンガープリントと MAC アドレスにはコロン、ダンプには空白、データベースの項目とハッシュの比較には区切りなし。3 つともバイトは同じです。

大文字か小文字かは関係ありますか。

値としては関係なく、テキストの比較としては関係します。Unix の道具は小文字、Windows の道具は大文字で書きます。比較の前に正規化してください。署名では仕様がどちらを期待するかを述べています。

テキストに全角スペースが混ざっているか、どう見ますか。

半角スペースなら 20 になるところに e3 80 80 が並びます。この表示はそのためにあります。見えない文字は、明らかに同じ 2 つの値が等しく比較されない最も多い理由です。

テキストは端末から出ますか。

いいえ。変換はこのページの中、お使いのブラウザーで行われます。ネットワークパネルが裏づけます。入力しているあいだ、入力を運ぶリクエストは出ません。

他のツール