使い方
- テキストを16進数にするには「エンコード」を、16進数をテキストに戻すには「デコード」を選択します。
- テキストや16進数を入力または貼り付けるか、ファイルを開いてそのバイト列を16進数で表示します。
- オプションを設定します。「大文字」、「区切り文字」(「なし」「スペース」「コロン」)、「プレフィックス」(「なし」、0x、\x)を選べます。
- 結果をコピーするか、ファイルとしてダウンロードします。
16進数(Base16)とは
16進数は、0~9 の数字と A~F の文字の 16 種類の記号を使います。16進数の 1 桁は 4 ビットを表すため、すべてのバイトはちょうど 2 桁(00~FF)で書けます。出力は入力の 2 倍のサイズになり、Base64 や Base32 より大きくなりますが、バイトの境目がひと目で分かります。そのため、デバッガー、バイナリエディター、ネットワークツールはデータをこの形式で表示します。
RFC 4648 では、このエンコード方式を Base16 として標準化しており、大文字のアルファベットを使い、パディングはありません。実際には小文字も同じくらい広く使われており、このツールを含め、デコーダーはどちらも受け付けます。
16進数の用途
- ハッシュ値と鍵。SHA-256 のダイジェストは 32 バイトで、16進数 64 桁で表記されます。暗号鍵、UUID、チェックサムも通常は16進数で表示されます。
- ハードウェアアドレス。MAC アドレスは 6 バイトの16進数で、通常はコロンで区切られます。区切り文字に「コロン」を選ぶと、この形式になります。
- エスケープシーケンス。C、Python、JavaScript の文字列では、
\xに続けて16進数 2 桁を書くと 1 バイトを表せます。「プレフィックス」の\xオプションは、まさにこの形式で出力します。 - Web のフォーマット。
#FF8800のような CSS の色は 3 バイトの16進数です。また、URL のパーセントエンコードでは、各バイトを%と16進数 2 桁で表します。
16進数をテキストにデコードする
デコーダーは書式に寛容です。大文字と小文字の数字を受け付け、スペース、改行、カンマ、コロン、セミコロン、ハイフンを無視し、0x、\x、%、&#x のプレフィックスを取り除きます。xxd -p の出力、MAC アドレス、UUID、カンマ区切りの 0x リスト、%XX 形式のエスケープ、HTML の16進数文字参照も、そのまま貼り付けられます。1 バイトには 2 桁が必要なため、桁数が奇数の場合はエラーになります。バイト列は、選択した文字コードのテキストとして表示されます。
テキストを経由せずに16進数を別のエンコード方式に変換するには、16進数 → Base64 または Base64 → 16進数を使用してください。
コードで16進数を扱う
# Python
'Hi'.encode().hex() # '4869'
bytes.fromhex('4869').decode() # 'Hi'
// Node.js
Buffer.from('Hi').toString('hex') // '4869'
Buffer.from('4869', 'hex').toString('utf8') // 'Hi'
# Shell
printf 'Hi' | xxd -p # 4869
仕様
| 使用文字 | 0-9 A-F |
|---|---|
| 出力サイズ | 1 バイトあたり 2 文字(200%) |
| パディング | なし |
| 規格 | RFC 4648 第 8 節 |
| 大文字と小文字の区別 | なし |
エンコード例
| 入力 (UTF-8) | 出力 |
|---|---|
Hello, World! | 48656c6c6f2c20576f726c6421 |
Base64.is | 4261736536342e6973 |
你好 | e4bda0e5a5bd |
よくある質問
16進数をテキストに変換するにはどうすればよいですか?
「デコード」に切り替えて16進数を貼り付けます。スペース、コロン、0x や \x のプレフィックスは自動的に取り除かれます。別の文字コードを選ばない限り、バイト列は UTF-8 のテキストとして表示されます。
16進数は大文字と小文字のどちらにすべきですか?
どちらも同じバイト列を表します。RFC 4648 は大文字を使いますが、多くのプログラミング言語は小文字で出力します。送信先のシステムが大文字を想定している場合は「大文字」をオンにしてください。デコーダーはどちらも受け付けます。