16進数エンコーダー・デコーダー(Base16)

テキスト、ファイル、生のバイト列を16進数に変換し、元に戻します。大文字・小文字、区切り文字、0x や \x のプレフィックスを選べます。デコーダーは、よく使われる16進数の書式を自動的に整えます。

すべてブラウザ内で処理され、データはアップロードされません。

使い方

  1. テキストを16進数にするには「エンコード」を、16進数をテキストに戻すには「デコード」を選択します。
  2. テキストや16進数を入力または貼り付けるか、ファイルを開いてそのバイト列を16進数で表示します。
  3. オプションを設定します。「大文字」、「区切り文字」(「なし」「スペース」「コロン」)、「プレフィックス」(「なし」、0x、\x)を選べます。
  4. 結果をコピーするか、ファイルとしてダウンロードします。

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.is4261736536342e6973
你好e4bda0e5a5bd

よくある質問

16進数をテキストに変換するにはどうすればよいですか?

「デコード」に切り替えて16進数を貼り付けます。スペース、コロン、0x や \x のプレフィックスは自動的に取り除かれます。別の文字コードを選ばない限り、バイト列は UTF-8 のテキストとして表示されます。

16進数は大文字と小文字のどちらにすべきですか?

どちらも同じバイト列を表します。RFC 4648 は大文字を使いますが、多くのプログラミング言語は小文字で出力します。送信先のシステムが大文字を想定している場合は「大文字」をオンにしてください。デコーダーはどちらも受け付けます。

16進数が元のデータの 2 倍の長さになるのはなぜですか?
各バイトが 2 文字になるため、100% 増加します。Base64 なら増加は約 33% だけです。サイズが重要な場合は、16進数 → Base64 でバイト列を変換してください。
これは数値を16進数に変換するのと同じですか?
厳密には違います。このツールは、テキストのバイト列のようなバイトの並びをエンコードします。255 を FF にするなど、1 つの整数を変換するには、基数変換ツールを使用してください。