16進エンコーディング解説
16進数(hex)エンコーディングは、基数16の表記法を使用してバイナリデータを表現します。0〜9の10個の数字(値0〜9)とA〜Fの6文字(値10〜15)の16の数字を使用します。各16進数字は正確に4ビットを表すため、16進数はバイナリデータを読み書きする最も人間に優しい方法です。1バイト(8ビット)は2つの16進数字で完全に表現されるため、プログラミングの至る所で16進数が登場します。
バイナリに対する16進数の基本的な利点は可読性です。32ビットのバイナリ数10110101101110101010111001011101は、16進数ではB5BAAE5Dになります。4分の1の長さで、読み取り、比較、記憶が劇的に容易になります。このコンパクトさにより、16進数はメモリアドレス、色の値、暗号学的ハッシュ、機械語コードの標準表記法となっています。
16進数と10進数の関係
| 10進数 | 2進数 | 16進数 |
|---|---|---|
| 0 | 0000 | 0 |
| 1 | 0001 | 1 |
| 2 | 0010 | 2 |
| 3 | 0011 | 3 |
| 4 | 0100 | 4 |
| 5 | 0101 | 5 |
| 6 | 0110 | 6 |
| 7 | 0111 | 7 |
| 8 | 1000 | 8 |
| 9 | 1001 | 9 |
| 10 | 1010 | A |
| 11 | 1011 | B |
| 12 | 1100 | C |
| 13 | 1101 | D |
| 14 | 1110 | E |
| 15 | 1111 | F |
各16進数字は正確に1つの4ビットバイナリシーケンスにマッピングされます。この直接マッピングにより、表を覚えてしまえば、16進数とバイナリの間を頭の中で変換できます。
開発者の一般的なユースケース
カラーコード
CSSとデザインツールは、6桁の16進数値を使用して色を表現します。#RRGGBB形式は、赤、緑、青にそれぞれ2桁の16進数を使用します。#FF0000は純粋な赤、#00FF00は純粋な緑、#0000FFは純粋な青です。#FFFFFFは白、#000000は黒です。
.primary { color: #2563eb; }
.success { color: #16a34a; }
.danger { color: #dc2626; }
#F00のような3桁の省略形は、各桁を2倍にして#FF0000に展開されます。
メモリアドレス
デバッガ、逆アセンブラ、低レベルツールはメモリアドレスを16進数で表示します。0x7FFF5FBFF9ECのようなスタックトレースは、コンパクトな形式で正確なメモリ位置を示します。CおよびC++のポインタは、%pを使用するとデフォルトで16進数で出力されます。
暗号学的ハッシュ
ハッシュ関数はバイナリダイジェストを生成し、従来は16進文字列として表示されます。SHA256は256ビットのハッシュを生成し、64文字の16進数で表示されます。この形式は、ファイルチェックサム、ブロックチェーントランザクションID、Gitコミットハッシュに使用されます。
機械語コードとバイナリプロトコル
機械語コードやプロトコルデータの各バイトは、16進数で読むのが最適です。ネットワークパケットインスペクタ、ファームウェアダンプ、バイナリファイル形式の仕様はすべて16進表記を使用します。
16進数と他の形式の変換
16進数から10進数へ
各16進数字に16の位置乗を掛け、右から左に0から数えます。
Hex: 2F
F = 15 × 16^0 = 15
2 = 2 × 16^1 = 32
合計: 15 + 32 = 47
10進数から16進数へ
16で繰り返し割り、余りを下から上に読みます。
Decimal: 47
47 ÷ 16 = 2 余り 15 (F)
2 ÷ 16 = 0 余り 2
結果: 2F
16進数から2進数へ
各16進数字を4ビットのバイナリ相当に置き換えます。
Hex: 2F
2 → 0010
F → 1111
Binary: 00101111
プログラミング言語のサポート
主要な言語はすべて組み込みの16進変換を備えています:
# Python
hex_value = hex(255) # '0xff'
decimal = int('ff', 16) # 255
// JavaScript
let hex = (255).toString(16); // 'ff'
let dec = parseInt('ff', 16); // 255
// PHP
$hex = dechex(255); // 'ff'
$dec = hexdec('ff'); // 255
// Java
String hex = Integer.toHexString(255); // 'ff'
int dec = Integer.parseInt("ff", 16); // 255
オンラインツール
Help2Codeの16進エンコーダ&デコーダツールを使用すると、テキスト、16進数、10進数、バイナリを即座に変換できます。デバッグ、学習、開発中のクイック変換に役立ちます。
URLでの16進数
URLのパーセントエンコーディングでは、しばしば16進数が使用されます。スペースは%20になり、20はスペース文字のASCIIコードの16進値です。URL内の任意のバイトは、%XXとして表現できます。XXは16進値です。これが、URLエンコーディングがパーセントエンコーディングとも呼ばれる理由です。
16進数 vs Base64
16進数とBase64はどちらもバイナリデータをテキストとしてエンコードしますが、目的が異なります。16進数は人間の可読性とデバッグに最適です。Base64はコンパクトなデータ転送のために設計されています。16進数はデータを100%拡大します(1バイトが2文字になる)が、Base64はわずか33%しか拡大しません。表示とデバッグには16進数を、保存と転送にはBase64を使用してください。
結論
16進エンコーディングは、低レベルデータ、色、メモリ、暗号技術を扱うあらゆる開発者にとって不可欠なスキルです。バイナリへの直接マッピングにより、バイナリデータの最も読みやすい表現となります。16進エンコーダ&デコーダをクイック変換に使用し、一般的な値については暗算での16進数から10進数への変換を練習してください。