tools / hex
hex/
テキストと 16 進数(hex)を相互変換。文字コードは UTF-8、GBK、UTF-16 などから選べ、出力の区切り文字・大文字・0x や \x プレフィックスも指定できます。
テキスト
hex
よくある質問
漢字 1 文字は 16 進数で何バイトですか? 他のツールと結果が違うのはなぜですか?
文字コードによって変わります。UTF-8 では一般的な漢字は 3 バイトで、たとえば「中」は e4 b8 ad です。GBK・GB2312 では 2 バイトで、「中」は d6 d0 です。絵文字は UTF-8 で 4 バイトです。英字と数字は UTF-8 でも GBK でも 1 バイトなので、結果は同じになります。他のツールと結果が合わないときは、まず相手がどの文字コードを使っているか確認してください。このツールの既定は UTF-8 です。
16 進数からテキストへの変換で「有効なテキストではない」と出る、または文字化けする場合はどうすればよいですか?
このバイト列が現在の文字コードでエンコードされたものではない、という意味です。別の文字コードを試してください。中国語のテキストでは UTF-8 と GBK が最も一般的で、古いソフトやデータベースのエクスポートでは GBK がよく使われます。UTF-16 の 16 進数には、たいてい 00 がたくさん含まれます。このツールは、デコードできないバイト列を文字化けした状態で無理に表示することはしません。例外は ISO-8859-1 で、どのバイトも何らかの文字に対応するためエラーにはなりませんが、日本語や中国語は文字化けします。GBK と GB2312 はどちらもブラウザ標準の GB18030 デコーダーで処理しており、Python や Java より寛容なため、GB2312 を選んでも GBK にしかない文字がデコードできます。そもそもテキストではないバイト列(画像、暗号化データ、ハッシュ値)は、どの文字コードを選んでもデコードできません。
16 進数からテキストへの変換では、どんな書き方を読み取れますか?
大文字と小文字のどちらも使えます。バイトの区切りにはスペース、改行、タブ、コロン、カンマ、ハイフンが使え、区切りなしでもかまいません。各バイトの前に 0x や \x を付けられるので、0x48,0x65 も \x48\x65 もそのままデコードできます。区切りと区切りの間は桁数が偶数である必要があるため、0x1 は 0x01 と書いてください。0-9、a-f 以外の文字が混ざった場合もエラーになり、どちらも何文字目かを示します。U+4E2D や %E4%B8%AD のような書き方には対応していません。URL エンコードはこのサイトの URL ツールを使ってください。
0x48,0x65 や \x48\x65 のような形式にするには?
区切り文字に「,」、プレフィックスに「0x」を選ぶと 0x48,0x65 になり、C や Java のバイト配列にそのまま使えます。区切り文字を「なし」、プレフィックスを「\x」にすると \x48\x65 になり、Python や C の文字列で使われるバイト表記です。プレフィックスは各バイトの前に付くため、区切り文字を「なし」にして 0x を付けると 0x480x65 になり、通常は使い道がありません。「大文字」の影響を受けるのは a-f だけで、0x の x は小文字のままです。
UTF-16 の結果の先頭に feff が付くのはなぜですか? 他のツールと結果が合いません
UTF-16 は Java の書き方に合わせて出力します。先頭に FE FF(バイトオーダーマーク)が付き、以降はビッグエンディアンなので、「中」は fe ff 4e 2d になります。マークなしの UTF-16BE なら 4e 2d で、結果をコピーして先頭の 2 バイトを削除すれば得られます。UTF-32 はビッグエンディアンでマークなしなので、「中」は 00 00 4e 2d です。デコード時、UTF-16 は先頭の FE FF(ビッグエンディアン)と FF FE(リトルエンディアン)を認識し、マークがなければビッグエンディアンとして扱います。
ASCII や ISO-8859-1 を選んで漢字を入力するとエラーになるのはなぜですか?
ASCII で表せるのは 0〜127 の文字だけで、ISO-8859-1 は U+00FF までです(アクセント付きの西ヨーロッパの文字で、漢字は含まれません)。範囲外の文字は、エラー(文字「中」は ASCII でエンコードできません)になります。Java の getBytes のように、黙って ? に置き換えられることはありません。GBK と GB2312 も同様で、絵文字やコード表にない珍しい文字はエラーになります。UTF-8 または GB18030 に切り替えれば変換できます。
入力したスペースや改行も変換されますか?
テキストから hex への変換では変換されます。入力欄の文字はすべて変換の対象で、前後のスペースや改行も含みます。スペースは 20、改行は 0a です。ブラウザの入力欄は改行を \n に統一するため、複数行のテキストの改行は 0d 0a ではなく 0a になります。Windows の改行が必要なら、結果を自分で書き換えてください。逆に hex からテキストへの変換では、hex 中の空白は無視され、バイトだけが対象になります。結果に含まれる 0d 0a も、改行 1 つとして表示されます。
入力した内容はアップロードされますか?
いいえ。変換はブラウザ内で完結し、通信は行わず、保存もしません。