Hex Translator - 16進数とテキストを相互変換する仕組みと文字化け対策
48 65 6C 6C 6F のようなHEXダンプを見て、これが何のテキストか読み解きたい―― いわゆる hex translator(hexadecimal translator) が解決する典型的なニーズです。 中身は難しくなく、2桁のHEXを1バイトとして解釈し、ASCII/UTF-8のルールで文字に変換しているだけです。 この記事ではHEXとテキストの対応関係、手動変換の手順、そしてつまずきやすい文字化けの原因と対処を まとめます。
A hex translator (hexadecimal translator) converts a hex byte dump like 48 65 6C 6C 6F back into readable text, or text into hex. Each two-digit hex pair is one byte; ASCII characters map to a single byte while non-ASCII characters expand into multiple UTF-8 bytes. This guide covers the mapping, manual conversion steps, and the most common causes of garbled output.
TL;DR
- 2桁のHEX(
00〜FF)= 1バイト。ASCII文字はこれ1組で1文字になる - 日本語などの非ASCII文字はUTF-8で複数バイト(かな漢字は通常3バイト、絵文字は4バイト)
- 文字化けの大半は「バイト列は正しいのに解釈するエンコーディングが違う」ことが原因
- 機密性の高いHEX(トークン・メモリダンプ)はブラウザ完結型のツールで扱う
Hex Converter
HEX⇔テキスト⇔バイナリを相互変換。UTF-8エンコーディングでhex to text / text to hexを即座に処理し、無効なHEX値はエラー表示で気づけます。ブラウザ完結で外部送信なし。
今すぐ試す →1. HEXとASCII/UTF-8の対応表 / Hex to ASCII / UTF-8 mapping
ASCII範囲(0〜127、HEXで 00〜7F)の文字は1バイト1文字で対応します。 よく使う文字を抜粋すると次のとおりです。
| 文字 / Char | HEX | 10進数 / Dec |
|---|---|---|
| スペース (space) | 20 | 32 |
| 0-9 | 30-39 | 48-57 |
| A-Z | 41-5A | 65-90 |
| a-z | 61-7A | 97-122 |
| 改行 (LF, \n) | 0A | 10 |
ASCII範囲外(日本語・絵文字など)はUTF-8で複数バイトに展開されます。例えば「あ」はE3 81 82(3バイト)、絵文字「😀」は F0 9F 98 80(4バイト)です。 バイト数はUTF-8の先頭バイトのビットパターンで決まり、1バイト目が 0xE0〜0xEFなら3バイト文字、0xF0〜0xF7なら4バイト文字と判別できます。
テキスト → HEX (UTF-8):
"Hi" → 48 69 (2バイト、ASCIIのみ)
"あ" → E3 81 82 (3バイト)
"😀" → F0 9F 98 80 (4バイト)
"Hiあ" → 48 69 E3 81 82 (混在も普通に発生)ASCII characters occupy exactly one byte. Non-ASCII characters expand into 2-4 UTF-8 bytes, and the leading byte's bit pattern tells you how many bytes follow (0xE0-0xEF starts a 3-byte sequence, 0xF0-0xF7 starts a 4-byte sequence).
2. 手動でHEXをテキストに変換する手順 / Converting hex to text by hand
- HEX文字列を2桁ずつのグループに分割する(1グループ=1バイト)
- 各グループを10進数に変換する(例:
48→ 72) - 値が127以下ならASCII表でそのまま文字を引く(72 = "H")
- 値が128以上なら単独では判定できない。前後のバイトとまとめてUTF-8のルールでデコードする
手順3までは電卓とASCII表があれば十分ですが、手順4のUTF-8マルチバイトデコードは手計算では 現実的ではありません。実務では言語標準のデコーダ(後述)かオンラインのhex translatorを使うのが 確実です。
3. 言語別実装 / Code examples
JavaScript / TypeScript
// hex -> text (UTF-8安全)
function hexToText(hex) {
const bytes = hex.split(" ").map((h) => parseInt(h, 16));
return new TextDecoder("utf-8").decode(new Uint8Array(bytes));
}
hexToText("48 69 e3 81 82"); // "Hiあ"
// text -> hex
function textToHex(text) {
return Array.from(new TextEncoder().encode(text))
.map((b) => b.toString(16).padStart(2, "0"))
.join(" ");
}
textToHex("Hiあ"); // "48 69 e3 81 82"Python
# hex -> text
bytes.fromhex("48 69 e3 81 82".replace(" ", "")).decode("utf-8") # 'Hiあ'
# text -> hex
"Hiあ".encode("utf-8").hex(" ") # '48 69 e3 81 82'Java
// hex -> text (Java 17+ の HexFormat)
byte[] bytes = HexFormat.of().parseHex("4869e38182");
String text = new String(bytes, StandardCharsets.UTF_8); // "Hiあ"
// text -> hex
String hex = HexFormat.of().formatHex("Hiあ".getBytes(StandardCharsets.UTF_8));PHP
// hex -> text
echo hex2bin("4869e38182"); // "Hiあ" (UTF-8のまま出力)
// text -> hex
echo bin2hex("Hiあ"); // "4869e38182"4. 文字化けの原因と対処 / Why hex-to-text output gets garbled
HEX→テキスト変換で最もよくある失敗は、バイト列は正しいのに解釈するエンコーディングを 間違えているケースです。UTF-8のバイト列をShift_JISとして読むと「縺」「繧」のような 見慣れない漢字が並び、Latin-1として読むと「ã」「æ」のようなアクセント付き文字が並びます。 どちらもバイト自体は壊れていないため、正しいエンコーディングで読み直せば復元できます。 詳しい逆引き手順は文字化けの原因切り分けガイドにまとめています。
一方で、途中のバイトが欠落・重複しているケースは復元できません。特にコピー&ペースト時に スペース区切りが崩れたり、奇数桁になっていたりすると1バイトの境界がずれ、UTF-8のデコードがinvalid byte sequence のようなエラーで失敗します。
| 症状 / Symptom | 原因 / Cause | 対処 / Fix |
|---|---|---|
| 「縺」「繧」が並ぶ | UTF-8をShift_JISとして誤解釈 | UTF-8として読み直す |
| 「ã」「æ」が並ぶ | UTF-8をLatin-1として誤解釈 | UTF-8として読み直す |
| デコードエラーで失敗 | 奇数桁・バイト欠落でUTF-8として不正 | 元のHEXダンプを桁数から見直す |
| 絵文字だけ文字化け | 4バイトのうち一部しかコピーされていない | 先頭バイト(F0-F7)から4バイト分を確認 |
5. 実務での使いどころ / Where this comes up in practice
- プロトコル・パケット解析: Wiresharkなどのキャプチャに出てくるHEXペイロードを読む
- ファイルのマジックナンバー確認:
89 50 4E 47はPNG、25 50 44 46はPDFなど先頭バイトで形式判定 - APIのデバッグ: バイナリレスポンスをHEXでログ出力し、期待する文字列と一致するか確認
- URLエンコード前の下調べ:
%E3%81%82のようなパーセントエンコードの中身をHEXとして読む
まとめ / Summary
hex translator(hexadecimal translator)がやっていることは「2桁ずつバイトに分割し、ASCII/UTF-8の ルールで文字に対応させる」だけです。ASCII範囲は1バイト1文字、非ASCII範囲は複数バイトという 原則さえ押さえれば、文字化けが起きたときも「バイトの解釈ミス」か「バイト自体の欠落」かを 素早く切り分けられます。
A hex-to-text translator simply splits a hex string into byte pairs and maps them to characters using ASCII (single byte) or UTF-8 (multi-byte) rules. Once you know that ASCII stays one-byte-one-character while everything else expands to 2-4 bytes, you can quickly tell whether garbled output is a wrong-encoding misread (recoverable) or missing bytes (not recoverable).
Hex Converter
4つの変換モード(Text→HEX / HEX→Text / HEX→Binary / Binary→HEX)をタブで切り替え。日本語・絵文字を含むUTF-8も正しく処理します。
今すぐ試す →関連ツール / Related tools
- Hex Converter — HEX⇔テキスト⇔バイナリの変換
- Unicode Inspector — 1文字ずつコードポイントを確認
- Base64 Encoder