16進数をテキストに変換する方法
- 入力 · Hex(16進数) に16進数を貼り付けます。大文字でも小文字でも、区切り文字があってもなくても構いません。
- 入力に合わせて 出力 · テキスト にテキストが表示されます。実行 で変換したいなら リアルタイム のチェックを外してください。
- 出力に
�が出るなら、出力の下の 文字コード を開いて別のものを試します。デフォルトは UTF-8 で、ASCII、Latin-1、Windows-1252 のほか 23 種類がリストにあります。 - テキストは 出力をコピー か ダウンロード で取得します。16進数がテキストではなくファイルのダンプなら、バイトを保存 で生のバイト列を、内容から推測した拡張子付きでディスクに書き出せます。
ツールの上にある テキスト → Hex の切り替えで方向を逆にできます。テキストを16進数に変換 を使っても構いません。
このツールが読める16進数の書式
16進数は、出力したツールによってさまざまな書き方で現れます。以下はすべて Hello にデコードされます。
| 書式 | 例 | よくある出どころ |
|---|---|---|
| 区切りなし | 48656c6c6f | xxd -p、sha256sum、データベースのダンプ |
| 空白区切り | 48 65 6c 6c 6f | Wireshark、バイナリエディター |
| コロン区切り | 48:65:6c:6c:6f | 証明書のフィンガープリント、openssl の出力 |
| ハイフン区切り | 48-65-6C-6C-6F | .NET の BitConverter.ToString |
0x 接頭辞 | 0x48 0x65 0x6c 0x6c 0x6f または 0x48656c6c6f | C のソース、デバッガー |
\x エスケープ | \x48\x65\x6c\x6c\x6f | Python、シェルスクリプト、ログ |
カンマ、セミコロン、ピリオドも区切り文字として使えます。貼り付けるのは16進数の列だけにしてください。xxd のデフォルト表示では、各行が 00000000: のようなオフセットで始まり、ASCII の列で終わります。そのまま貼るとオフセットもバイトとして読まれ、ASCII 列の最初の文字でエラーになります。代わりに xxd -p でプレーンな16進数を出力してください。
16進数を ASCII として読む
16進数 2 桁が 1 バイトで、ASCII では 80 未満の各バイトが 1 文字です。覚えておくと便利な範囲は次のとおりです。
| 16進数 | 文字 |
|---|---|
20 | 空白 |
30–39 | 数字 0–9 |
41–5A | A–Z |
61–7A | a–z |
21–2F | ! " # $ % & ' ( ) * + , - . / |
0A、0D | 改行(LF)と復帰(CR)(0D 0A は Windows の改行) |
大文字と小文字はちょうど 20 離れています。41 が A、61 が a です。これと上の表があれば、短い16進数は目で読めます。48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 は Hello, world で、2c がカンマ、20 が空白です。
16進数を UTF-8 に:80 ~ FF のバイト
基本的な英語以外の文字は UTF-8 で 2 バイト以上になり、そのバイトはすべて 80 以上です。同じバイト列でも、どの文字コードで読むかによってテキストが変わります。
| 16進数 | UTF-8 として読む | Windows-1252 として読む |
|---|---|---|
63 61 66 c3 a9 | café | café |
e2 82 ac | € | € |
f0 9f 91 8b | 👋 | 👋 |
63 61 66 e9 | caf� | café |
最初の 3 行は UTF-8 のデータで、最後の行は é が 1 バイトの e9 になる Latin-1 や Windows-1252 のデータです。Ã や â が並んでいたら、ほぼ確実に UTF-8 のバイト列を 1 バイト文字コードで読んでいます。どの文字コードでも意味の通るテキストにならないなら、そのバイト列はおそらくテキストではありません。ステータス行の 検出: を確認してください。認識できる形式ならその名前が表示されます。
16進数、Base64、同じバイト列
16進数は 1 バイトに 2 文字、Base64 は 3 バイトに 4 文字を使うので、同じデータなら Base64 のほうが 3 分の 1 短くなります。手元の文字列が SGVsbG8 のような書き出しで、f より後の英字を含んでいるなら、それは Base64 です。Base64 をテキストに変換 でデコードしてください。API や設定ファイル用に16進数のバイト列を Base64 にするなら 16進数を Base64 に変換 を使います。それぞれがどこで使われるかは 16進数・Base32・Base58・Base85 の比較 で解説しています。
コードで16進数を文字列に変換する
bytes.fromhex("48656c6c6f").decode("utf-8") # 'Hello'
bytes.fromhex("48 65 6c 6c 6f").decode("utf-8") # spaces are fine: 'Hello'
bytes.fromhex は空白を読み飛ばしますが、コロンや 0x は受け付けないので、先に取り除いてください。Node.js では次のようになります。
Buffer.from("48656c6c6f", "hex").toString("utf8"); // 'Hello'
Buffer.from("48zz65", "hex"); // <Buffer 48>
2 行目は落とし穴の例です。Buffer.from は16進数でない最初の文字で止まり、そこまでの結果をエラーなしで返します。ほかのパターンは Python と Node.js のページにあります。
よくある質問
16進数を ASCII に変換するには?
16進数を貼り付けて出力を読むだけです。ASCII が扱うのはバイト 00 ~ 7F だけなので、それより上のバイトを UTF-8 として読まずに � と表示させたいなら、文字コード を ASCII にしてください。
48 65 6c 6c 6f はテキストで何ですか?
Hello です。48 が H、65 が e、6c が l(2 回)、6f が o です。
16進数が é などのおかしな文字になるのはなぜですか?
UTF-8 のバイト列が Latin-1 や Windows-1252 として読まれているか、その逆です。c3 a9 は UTF-8 では é、Windows-1252 では é です。テキストが正しく読めるまで 文字コード を切り替えてください。
「16進数の桁数が奇数です」とはどういう意味ですか?
1 バイトは16進数 2 桁なので、合計は偶数でなければなりません。コピーのときに 1 桁失われていて、多くは先頭か末尾です。入力の最初と最後のペアを確認してください。
変換結果にリンクできますか?
できます。ページのアドレスに #in= と16進数を付け加えてください。たとえば /hex-to-text/#in=48656c6c6f です。# 以降の部分はブラウザ内にとどまり、サーバーには送られません。