文字列・バイト列・HEXとは?関係をわかりやすく解説

コンピューターが直接保存するのは文字そのものではなく数値の並びです。文字コードが文字をバイト列へ変え、その値を読みやすく表したものがHEXです。

この記事の要点

手元の文字列で確認する

文字コードを選び、文字列とHEXを相互変換できます。

文字列16進数変換ツールを使う

文字列・文字コード・バイト列・HEXの関係

画面に見える「A」や「あ」は文字列です。保存や通信を行うときは、UTF-8やShift_JISなどの文字コードに従って数値へ符号化されます。その結果として得られる数値の並びがバイト列です。

文字列 → 文字コードで符号化 → バイト列 → 16進数で表示 → HEX

HEX(hexadecimal)は16進数という数値の表し方で、0〜9とA〜Fを使います。1バイトの範囲0〜255を00FFの2桁で表せるため、バイト列の表示に便利です。

例:AをHEXで表す

英字の「A」はUnicodeでU+0041です。UTF-8では1バイトの01000001として符号化されます。これを16進数へ直すと41です。

「A」の変換結果

文字列:A
UTF-8のバイト列:01000001
HEX:41

ここで重要なのは、41自体が文字ではないことです。「UTF-8として復号する」という条件があって初めて「A」に戻せます。

日本語は複数バイトになる

UTF-8ではASCII範囲の英数字を1バイト、日本語のひらがなや漢字の多くを3バイトで表します。たとえば「あ」はUTF-8でE3 81 82です。

文字UTF-8のHEXバイト数
A411
1311
E3 81 823
E6 97 A53

文字化けが起こる理由

文字列をUTF-8でバイト列にしたのに、Shift_JISとして読み戻すと、同じ値を別の規則で解釈してしまいます。これが文字化けの代表的な原因です。HEXが分かれば元のバイト列を変えずに確認できるため、どの段階で解釈がずれたかを調べやすくなります。

HEX表示の主な用途

よくある質問

HEXは文字コードですか?

いいえ。HEXは数値を16進数で表す記法です。文字コードで得られたバイト値を見やすく表示するために使われます。

1文字は必ず1バイトですか?

必ずしも1バイトではありません。UTF-8ではASCII文字は1バイト、日本語の多くは3バイトです。

文字化けはなぜ起こりますか?

符号化に使った文字コードと、復号時に選んだ文字コードが一致しない場合などに起こります。