DevToolBox

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

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で 007F)の文字は1バイト1文字で対応します。 よく使う文字を抜粋すると次のとおりです。

文字 / CharHEX10進数 / Dec
スペース (space)2032
0-930-3948-57
A-Z41-5A65-90
a-z61-7A97-122
改行 (LF, \n)0A10

ASCII範囲外(日本語・絵文字など)はUTF-8で複数バイトに展開されます。例えば「あ」はE3 81 82(3バイト)、絵文字「😀」は F0 9F 98 80(4バイト)です。 バイト数はUTF-8の先頭バイトのビットパターンで決まり、1バイト目が 0xE00xEFなら3バイト文字、0xF00xF7なら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

  1. HEX文字列を2桁ずつのグループに分割する(1グループ=1バイト)
  2. 各グループを10進数に変換する(例: 48 → 72)
  3. 値が127以下ならASCII表でそのまま文字を引く(72 = "H")
  4. 値が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

まとめ / 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

関連ガイド / Related guides