用語辞典・データ・文字コード

16進数

16進数とは

16進数(hexadecimal/ヘクサデシマル、16進/ヘックス)は、0~9とA~Fの16種類の数字を使って値を表す記数法です。A〜Fは十進数の10〜15に相当します。

一桁で0〜15、つまり4ビットの全パターンを表せます。二桁なら8ビット=一バイトの0〜255を00FFで表せるため、バイナリーデータの表示に向きます。

16進数はデータを暗号化・圧縮する形式ではなく、同じ数値やバイトを人が読みやすい桁で書く表記です。表示した二文字と、元の一バイトはデータ量もバイト値も別です。

4ビットを一つの16進数字、8ビットを二つの16進数字へ対応付けるパケット・メモリー・色・ハッシュのバイト列を短い桁で読む
四つの二状態ビットが16進数一桁へ、八つのビットが二桁へ対応し、16個の値を4×4に並べる図、パケットダンプ・メモリー・RGB色・ハッシュ、先頭0、大小文字、リトルエンディアンのバイト並びを示すピクトグラム図解
図1図の色タイルは0〜Fの位置を表す抽象記号です。実際の桁とビット対応は下の表で確認します。

一桁が4ビットに対応する

1 16進数字4ビット・16通り

0F00001111を表します。

2 16進数字s1バイト・256通り

00FFで一バイトの全値を表します。

Place値16の累乗で重み付け

右端から16の0乗、1乗、2乗の位として計算します。

Base16テキスト一バイトを二文字へする

RFC 4648のbase16ではパディングを必要としません。

0〜Fと4ビットの対応

16進10進2進4ビット16進10進2進4ビット
000000881000
110001991001
220010A101010
330011B111011
440100C121100
550101D131101
660110E141110
770111F151111

位取りで十進数へ直す

16進2Fは、2 × 16 + 15なので十進47です。右端一桁は0〜15、その左は16個単位、その左は256個単位として足します。

二進数からは右から4ビットずつ区切り、各グループを一桁へします。1010 1111AFです。桁不足は左へ0を補います。

接頭辞と接尾辞はデータの一部とは限らない

プログラムでは0x2F、URLのパーセントエンコーディングでは%2F、色では#2F...のように文脈別の印を使います。0x#は16進数字ではありません。

ツールによって末尾h、バックスラッシュエスケープ、空白区切り等もあります。入力欄が接頭辞を受けるか、何バイト単位か、符号付きかを確認します。

A〜Fの大小文字

数値表記ではAFafは同じ値です。RFC 4648のBase16デコーダーは大文字小文字を受けられますが、生成器は上位仕様の正規表記に従います。

ハッシュ文字列、色コード、URL等では比較前に仕様どおり正規化します。大小文字以外の余分な区切り記号や全角文字まで勝手に許しません。

先頭0は値を変えず、幅を示す

数値として0AAは同じ10です。しかしバイトダンプでは常に二桁にして一バイト境界を示します。16ビットフィールドなら四桁、256ビットダイジェストなら64桁というように幅を保ちます。

先頭0を落とした可変長文字列を連結すると、どこがフィールド境界か分からなくなります。プロトコルの固定幅または長さを維持します。

16進文字列と元バイトを区別する

一バイト値41ASCII文字Aです。一方、文字列"41"をASCII/UTF-8で保存すると、文字4のバイト 34と文字1のバイト 31という二バイトになります。

「16進を送る」が生のバイト列かBase16文字列かをAPIで明示します。テキスト化すると一バイトが二文字になり、容量は元バイナリーの二倍です。

エンディアンはバイトの順序に現れる

16ビット値1234をビッグエンディアンで保存すればバイト列12 34、リトルエンディアンなら34 12です。16進ダンプはメモリー上のバイト順を左から表示します。

各バイトの二桁12まで21へ反転するわけではありません。数値全体の表記と、メモリー上のバイト列の表示を分けます。

使われる場所

メモリーアドレス、パケットダンプ、MACアドレス、IPv6、RGB色、Unicode符号位置、ファイル識別用のマジックナンバー、SHA-256 ダイジェスト等で使います。どれも16進という表記は共通でも、区切り・ビット幅・バイト順・意味は別です。

16進数は4ビットを一桁で表し、一バイトを二桁で読める記数法です。接頭辞・幅・大小文字・生のバイト列とBase16文字列・エンディアンを文脈ごとに区別します。

base16 alphabet・4bit一桁・一byte二桁・大小文字:RFC 4648 Section 8

関連用語