テキストを2進数に変換する方法
- 入力 · テキスト にテキストを入力するか貼り付けます。2進数はすぐに 出力 · 2進数 に表示されます。
- 出力の下の 区切り文字 で、バイト間に入れるものを設定します。スペース、なし、
,、,、改行から選べます。 - 入力の下の 文字コード で、文字をどのバイト列にするかが決まります。デフォルトは UTF-8 で、英語のテキストなら ASCII と同じです。
- 結果は 出力をコピー または ダウンロード で保存します。元に戻すには、2進数を 2進数をテキストに に貼り付けるか、2進数 → テキスト の切り替えを使います。
単語を 1 文字ずつ
Hello を2進数にすると 01001000 01100101 01101100 01101100 01101111 です。各グループの由来は次のとおりです。
| 文字 | 10進数 | 2進数 |
|---|---|---|
H | 72 | 01001000 |
e | 101 | 01100101 |
l | 108 | 01101100 |
l | 108 | 01101100 |
o | 111 | 01101111 |
10進数はその文字の ASCII コードで、2進数は同じ数を 2 進法で書いて 8 桁にゼロ埋めしたものです。H と h(01101000)は左から 3 番目のビットしか違わないことに注目してください。ASCII の大文字と小文字の組はすべてそうなっており、プログラムが 1 回のビット演算で大文字・小文字を切り替えられるのはこのためです。
区切り文字の種類
同じ 2 文字の Hi を、区切り文字 の各設定で表すと次のようになります。
| 区切り文字 | 出力 |
|---|---|
| スペース | 01001000 01101001 |
| なし | 0100100001101001 |
, | 01001000, 01101001 |
, | 01001000,01101001 |
| 改行 | 1 行に 1 バイト |
スペース区切りは最も読みやすく、確認もしやすい形です。区切りのない形は、パズルやプロトコル仕様のビット列として必要になりますが、1 桁でも欠けるとそれ以降がすべてずれるので、スペース区切りの控えも残しておいてください。カンマ区切りはコードや表計算のセルに貼り付けられますが、本格的なソースコードなら Base64 をバイト配列に が正しい配列リテラルを書き出します。
ASCII 以外の文字
英語の普通の文字、数字、記号は 1 文字 1 バイトです。それ以外は UTF-8 ではより長くなり、変換ツールはすべてのバイトを書き出します。
| テキスト | バイト数 | 2進数(UTF-8) |
|---|---|---|
ñ | 2 | 11000011 10110001 |
中 | 3 | 11100100 10111000 10101101 |
🙂 | 4 | 11110000 10011111 10011001 10000010 |
文字コード を切り替えると、ビットもそれに応じて変わります。UTF-16LE では Hi が 01001000 00000000 01101001 00000000 となり、1 文字 2 バイトで、2 バイト目がゼロになります。同じテキストなのに他人の2進数と一致しない場合は、何よりも先に文字コードを比べてください。
テキスト、2進数、Base64
2進数はバイトを最も文字どおりに書き表す方法で、最も長くなる方法でもあります。1 バイトにつき 8 文字に加えて区切り文字が入ります。Base64 は同じバイト列を 1 バイトあたり約 1.33 文字で書くため、テキスト形式の中でファイルや鍵を運ぶのに使われます。Hi は Base64 では SGk= で、テキストを Base64 に で直接作れます。8 ビットのグループが Base64 の使う 6 ビットの単位に組み直される様子を見るには、Base64 を2進数に で変換し、Base64 の仕組み を読んでみてください。
コードでテキストを2進数に
" ".join(f"{b:08b}" for b in "Hi".encode("utf-8")) # '01001000 01101001'
Array.from(new TextEncoder().encode("Hi"),
b => b.toString(2).padStart(8, "0")).join(" "); // '01001000 01101001'
08b の書式と padStart(8, "0") が先頭のゼロを補います。これがないと H は 1001000 になり、グループの桁が揃わなくなります。文字列とバイト列の扱いについては Python と JavaScript のページで詳しく解説しています。
よくある質問
「hello」は2進数でどうなりますか?
01101000 01100101 01101100 01101100 01101111 です。先頭を大文字にした Hello では、最初のグループだけが 01001000 に変わります。
自分の名前を2進数で書くには?
入力欄に名前を入力して、出力をコピーします。1 文字が 8 桁になります。姓と名の間のスペースは 00100000 です。
1 文字がちょうど 8 桁になるのはなぜですか?
コンピューターはテキストをバイト単位で保存し、1 バイトは 8 ビットだからです。変換ツールはすべてのバイトを先頭のゼロで埋めるので、A(65)は 1000001 ではなく 01000001 と書かれます。
16 ビットや 32 ビットになる文字があるのはなぜですか?
UTF-8 で 2 バイト以上必要な文字だからです。ñ は 2 バイト、中 は 3 バイト、絵文字は 4 バイトです。UTF-16 では普通の英字でも 2 バイトになります。