テキストを16進数に変換する方法
- 入力 · テキスト にテキストを入力するか貼り付けます。入力に合わせて 出力 · Hex(16進数) に16進数が表示されます。
- 入力の下の 文字コード で、文字をどのバイト列にするかが決まります。受け取る側のシステムが別の文字コードを想定していない限り、UTF-8 のままにしてください。
- 出力の下で、大文字/小文字(小文字または大文字)、区切り文字(なし、スペース、
:、0x、\x)、1 行あたりのバイト数(なし、16、32)を選びます。 - 結果は 出力をコピー または ダウンロード で保存します。Hex(16進数) → テキスト の切り替えでテキストに戻せます。16進数をテキストに でも同じことができます。
出力のスタイル
区切り文字と大文字/小文字のオプションで、16進数を貼り付けるよくある場所に対応できます。テキスト Hi! の場合は次のとおりです。
| 設定 | 出力 | 向いている場所 |
|---|---|---|
| なし、小文字 | 486921 | ハッシュ、URL、JSON |
| スペース、大文字 | 48 69 21 | バイナリエディター、プロトコルの文書 |
: | 48:69:21 | フィンガープリント、MAC アドレス風の表記 |
0x | 0x48 0x69 0x21 | C やアセンブラのソース |
\x | \x48\x69\x21 | C、Python、Bash の printf の文字列エスケープ |
\x 形式はそのまま文字列リテラルに入れられます。Bash で printf '\x48\x69\x21' を実行すると Hi! と表示されます。1 行あたりのバイト数 を使うと長い出力を 16 または 32 バイトごとの行に分けられるので、オフセットを目で数えられます。
1 文字が 1 バイト以上になる
ASCII の文字は 1 文字 1 バイトで、UTF-8 でもそのまま同じなので、英語のテキストならどちらの文字コードでも同じ16進数になります。それ以外は文字コードによって変わります。
| テキスト | UTF-8 | ISO-8859-1 | UTF-16LE |
|---|---|---|---|
A | 41 | 41 | 41 00 |
é | c3 a9 | e9 | e9 00 |
€ | e2 82 ac | 表現不可 | ac 20 |
👋 | f0 9f 91 8b | 表現不可 | 3d d8 4b dc |
文字コードで表現できない文字は ? に置き換えられ、ステータス行に置き換えた個数が表示されます。別のシステムの16進数が手元のものと一致しないなら、まず双方の文字コードを確認してください。
目に見えない文字を見つける
16進数への変換は、画面上では何も見えない文字を確認する最も手早い方法です。表示がまったく同じ 2 つの文字列でも、バイト列が違うことがあります。
| UTF-8 での16進数 | 文字 |
|---|---|
20 | 普通のスペース |
c2 a0 | ノーブレークスペース。Web ページや Word からコピーしたテキストによく含まれます |
e2 80 8b | ゼロ幅スペース |
ef bb bf | ファイル先頭のバイトオーダーマーク(BOM) |
0d 0a | Windows の改行(Linux や macOS では 0a のみ) |
パスワード、API キー、設定値が「合っているはずなのに拒否される」ときは、区切り文字 をスペースにしてここに貼り付け、これらの文字がないか探してください。テキストを Base64 に でテキストを Base64 にする前にも、同じ確認が役立ちます。Base64 は目に見えないバイトもすべて保持するので、エンコード後の値にもそのまま残ります。
コードでテキストを16進数に
"Hi!".encode("utf-8").hex() # '486921'
"Hi!".encode("utf-8").hex(" ") # '48 69 21' (separator argument, Python 3.8+)
"é".encode("latin-1").hex() # 'e9'
const hex = Array.from(new TextEncoder().encode("café"),
b => b.toString(16).padStart(2, "0")).join(" ");
// '63 61 66 c3 a9'
TextEncoder は常に UTF-8 を出力します。対応する Base64 の呼び出し方は JavaScript と Python のページにあります。
よくある質問
文字列を16進数に変換するには?
入力欄に文字列を貼り付けます。各文字は選んだ文字コードでのバイト値になり、1 バイトが16進数 2 桁で表されます。Python なら "Hello".encode("utf-8").hex() で同じ結果になります。
「Hello」は16進数でどうなりますか?
ASCII でも UTF-8 でも 48 65 6c 6c 6f です。普通の英字では両者は一致します。UTF-16LE では 48 00 65 00 6c 00 6c 00 6f 00 になります。
é が c3 a9 の 2 バイトになるのはなぜですか?
UTF-8 は U+007F より上の文字をすべて 2~4 バイトでエンコードするからです。1 バイトの e9 が必要なら、文字コード を ISO-8859-1(Latin-1)か Windows-1252 にしてください。
各バイトの前に 0x を付けた16進数にするには?
区切り文字 を 0x にします。出力は 0x48 0x65 0x6c 0x6c 0x6f になります。C や Rust の配列リテラル全体が必要なら、Base64 をバイト配列に が宣言まで書き出します。