16進数→文字列変換ツールの使い方
48 65 6C 6C 6F、0x48,0x65、\x48\x65のような16進数の文字列を貼り付けます。区切り文字が混在していても問題ありません。- デコードされたテキストがすぐに表示されます。文字化けしている場合は、別の文字コード(UTF-8、ASCII/Latin-1、UTF-16)を選んでください。
- テキストをコピーするか、ファイルとしてダウンロードします。入れ替えボタンを押すと、テキストを16進数に戻せます。
16進数からASCII文字へのデコードの仕組み
16進数の2桁が1バイトを表し、値は00からFFまでです。ASCIIとUTF-8では20~7Eのバイトが表示可能な文字なので、48 65 6C 6C 6FはH、e、l、l、oで「Hello」と読めます。ASCII以外の文字は、UTF-8では複数のバイトで表されます。
| 16進数 | 文字 |
|---|---|
0A | ラインフィード(改行) |
0D | キャリッジリターン |
20 | スペース |
21 / 2C / 2E | ! / , / . |
30–39 | 数字 0–9 |
41–5A | 大文字 A–Z |
61–7A | 小文字 a–z |
C3 A9 | UTF-8のé |
E2 82 AC | UTF-8の€ |
正しい文字コードの選び方
- UTF-8:Webや大半のファイル、APIで標準の文字コードです。ASCIIだけのテキストは、そのまま有効なUTF-8でもあります。
- ASCII / Latin-1 (Windows-1252):古いシステムの西欧言語テキストで使われる、1文字1バイトの文字コードです。すべてのバイトがいずれかの文字に対応するため、デコードに失敗することはありません。
- UTF-16 LE/BE:1文字2バイトの文字コードで、Windows API、Java、JavaScriptの文字列で使われています。UTF-16 LEでは
48 00 69 00が「Hi」です。
�の記号が表示される場合は、選択した文字コードとして無効なバイトが含まれているか、その16進数がテキストではなく、画像やハッシュ値、圧縮データなどのバイナリデータである可能性があります。
プログラムで16進数を文字列に変換する
- Python:
bytes.fromhex('48656c6c6f').decode() - Node.js:
Buffer.from('48656c6c6f', 'hex').toString() - ブラウザのJavaScript:
new TextDecoder().decode(Uint8Array.from('48656c6c6f'.match(/../g), (h) => parseInt(h, 16))) - LinuxとmacOS:
echo 48656c6c6f | xxd -r -p
よくある質問
「16進数→テキスト」と「16進数→ASCII」の違いは何ですか?
ASCIIが扱うのは128文字(バイト00~7F)で、英字・数字・記号だけです。16進数→テキスト変換では、日本語などほかの言語の文字や絵文字も扱えます。これらはUTF-8では2~4バイトで表されます。英語だけのテキストなら、どちらも同じ結果になります。
「不完全なバイト」というエラーが出るのはなぜですか?
1バイトはちょうど2桁の16進数で表す必要があります。桁数が奇数になるのは、たいてい先頭の0が抜けている(Aではなく0Aと書く)か、コピーの途中で文字が欠けたためです。エラーメッセージで問題の位置を確認できます。
0xや\xの接頭辞が付いた16進数もデコードできますか?
はい。0x、\x、%などの接頭辞や、スペース、改行、カンマ、コロン、ハイフンは自動的に取り除かれるので、Cの配列、Pythonのバイト列、16進ダンプもそのまま貼り付けられます。
データがどこかにアップロードされることはありますか?
いいえ。16進数はブラウザ内のJavaScriptでデコードされ、データが端末の外に出ることはありません。