情報の授業やログに 48 65 6c 6c 6f が出てきたら、まず「16進数で書かれたバイト列かもしれない」と考えます。この例はUTF-8として読むと Hello です。ただし、0〜9とa〜fだけで書かれていることは手掛かりであり、文字列だと断定する根拠にはなりません。

HexとUTF-8は役割が違う

Hex(16進表記)は、1バイトの値を 00〜ff の2桁で表します。例えば 48 は10進数では72です。UTF-8では、このバイトが英字 H に対応します。

変換の途中では、次の3つを分けて考えると混乱しません。

段階 Helloの例 意味
Hex表記 48 65 6c 6c 6f 人が読める形で記したバイトの値
バイト列 5バイト 実際のデータ
UTF-8の文字列 Hello バイト列を文字として解釈した結果

16進数の 41 を整数として10進数にするなら65です。バイト 41 を文字として読むなら A です。前者は進数変換、後者はHex・文字列変換を使います。

Helloを復元する手順

  1. Hex・文字列変換を開き、変換方向を「Hex → UTF-8」にします。
  2. 48 65 6c 6c 6f を入力し、「変換する」を押します。
  3. 出力が Hello、バイト数が5であることを確認します。
  4. 方向を「UTF-8 → Hex」に切り替え、Hello を入力すると、元のバイト表記へ戻せます。

大文字の 6C と小文字の 6c は同じ値です。Tools Hubでは区切りなしの 48656c6c6f も使えます。半角スペース・改行・タブは区切りとして除かれますが、全角スペースやカンマは除かれません。

日本語1文字が3バイトになる例

猫 をUTF-8へ変換すると e7 8c ab の3バイトです。文字数1、バイト数3、区切りを除くHexの桁数6は、それぞれ違う数を表しています。

UTF-8では文字により必要なバイト数が異なります。そのため、Hexを2桁ずつ取り出して各バイトを独立した文字として読む方法では、日本語を正しく復元できません。まずバイト列全体へ戻してからUTF-8として読みます。

また、Unicodeのコードポイント U+732B と、UTF-8のバイト列 e7 8c ab は別の表記です。732b をそのままUTF-8のバイト列として入力しても、猫 にはなりません。

変換できないときの確認表

入力・症状 原因 確認すること
486 Hexが奇数桁で1バイトを作れない コピー漏れがないか原文と照合する
0x48 0x65 ツールが0x接頭辞を受け付けない 各バイトの0xを除き 48 65 にする
48,65 カンマはHexの数字ではない 区切りを半角スペースにする
ff Hexとしては有効でもUTF-8として無効 元データの文字コードやファイル形式を確認する
出力が読めるが意味不明 変換順序や想定形式が違う可能性 問題の指示と元データを確認する

このツールは不正なUTF-8を � に置き換えて成功扱いにせず、警告とHexのバイト列を表示します。Shift_JISの文章、画像、圧縮データなどを入力した場合は、対応する形式を扱えるツールが必要です。

変換結果を確かめる

元の文字列を手元に残し、試した変換と結果を1段階ずつ記録します。復元結果がBase64らしく見えた場合も、すぐ正解と決めず、Base64の仕組みと照合してください。

Hex・文字列変換ツールに e7 8c ab を入力し、「猫」に戻ることと、UTF-8では3バイトになることを確かめてください。