2進数をテキストに変換する手順
- 2進数を 入力 · 2進数 に貼り付けます。バイトは空白、改行、カンマ、セミコロン、
|で区切っても、区切らなくてもかまいません。 - 入力と同時に 出力 · テキスト にテキストが表示されます。
�が表示された場合、ビット列が UTF-8 として不正です。出力の下の 文字コード で ISO-8859-1 など別のものを試してください。- 出力をコピー でテキストをコピーします。ツール上部の テキスト → 2進数 で方向を切り替えられます。テキストから 2進数へ でも同じです。
2進数を手で読む方法
8 ビットのグループがそれぞれ 1 バイトです。各位置に左の 128 から右の 1 までの値を割り当て、1 がある位置の値を合計します。
| ビット | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
|---|---|---|---|---|---|---|---|---|
| 値 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
01001000 は 64 + 8 = 72 で、ASCII の 72 番の文字は H です。01101001 は 64 + 32 + 8 + 1 = 105 で、i になります。
英字ならこの計算はほとんど必要ありません。ASCII は規則的に並んでいるからです。最初の 3 ビットで文字の種類がわかり、英字なら最後の 5 ビットがアルファベット内の順番を表します。
| 先頭のビット | 意味 | 例 |
|---|---|---|
010 | 大文字 | 01000001 A、01001000 H、01011010 Z |
011 | 小文字 | 01100001 a、01101001 i、01111010 z |
0011 | 数字 | 00110000 0、00111001 9 |
00100000 | 空白 |
つまり 01000011 の末尾は 00011 で、これは 3、3 番目の文字の C です。大文字と小文字の違いは、左から 3 番目の 1 ビットだけです。
受け付ける形式
| 入力 | 読み取り方 |
|---|---|
01001000 01101001 | 空白や改行で区切った 8 ビットのグループ |
01001000,01101001 または 01001000;01101001 | カンマ、セミコロン、| を区切りとして使用 |
0b01001000 0b01101001 | 0b 接頭辞は無視 |
1001000 1101001 | 古典的な 7 ビット ASCII の演習問題のような 7 ビットのグループ |
0100100001101001 | 1 本のビット列を 8 ビットずつに分割 |
どれも Hi にデコードされます。8 ビットより短いグループは 1 バイトとして読まれるので、7 ビット版も動作します。8 ビットより長いグループが 1 つでもあると、ツールはすべてのビットを 1 本の文字列につなげ、それをバイトに切り分けます。0、1、区切り文字以外の文字があると、不正な文字の位置を示して変換が止まります。メッセージの横の 表示 ボタンを押すと、入力欄でその文字が選択されます。
プレーンな ASCII ではない 2進数
ASCII のバイトは必ず 0 で始まります。1 で始まるバイトは複数バイトからなる UTF-8 の文字の一部で、先頭のビットからシーケンスの長さがわかります。
| 文字 | UTF-8 のビット列 | パターン |
|---|---|---|
é | 11000011 10101001 | 110 で 2 バイト文字が始まり、10 が続きを表す |
€ | 11100010 10000010 10101100 | 1110 で 3 バイト文字が始まる |
👋 | 11110000 10011111 10010001 10001011 | 11110 で 4 バイト文字が始まる |
これらを 1 バイトずつデコードすると、é のような文字化けになります。バイトをまとめたまま、文字コード を UTF-8 にしておいてください。
2進数から Base64 へ
2進数、16進数、Base64 は、どれも同じバイト列の書き方です。1 バイトあたり 2進数は 8 文字、16進数は 2 文字、Base64 は約 1.33 文字を使うので、システムがバイナリデータをテキスト経由で運ぶときは Base64 を使います。メールの添付ファイル、JSON のフィールド、data URI などです。ビット列を直接 Base64 にするには 2進数から Base64 へ を使います。Base64 文字列の中のビットを見るには Base64 から 2進数へ を使ってください。そのビットを 6 つずつまとめ直す仕組みは、Base64 の仕組み で説明しています。
コードで 2進数をテキストにする
bits = "01001000 01101001"
bytes(int(b, 2) for b in bits.split()).decode("utf-8") # 'Hi'
const bits = "01001000 01101001";
new TextDecoder().decode(Uint8Array.from(bits.split(" "), b => parseInt(b, 2))); // 'Hi'
どちらもグループが 1 つの空白で区切られていることを前提にしています。上のツールは入力形式にもっと寛容です。
よくある質問
01001001 00100000 01101100 01101111 01110110 01100101 00100000 01111001 01101111 01110101 はどういう意味ですか?
I love you です。8 ビットのグループがそれぞれ ASCII の 1 文字で、00100000 は単語の間の空白です。
1 文字は何桁の 2進数でできていますか?
プレーンな ASCII テキストの英字や数字なら、8 桁(1 バイト)です。UTF-8 では、アクセント付きの文字は 16 ビット、ほかの文字体系の多くは 16 ビットか 24 ビット、絵文字は 32 ビットです。日本語のひらがなや漢字は、ほとんどが 24 ビットです。
空白のない 2進数も変換できますか?
はい。0100100001101001 のような連続した文字列は、左から 8 ビットずつ切り分けます。長さは 8 の倍数である必要があり、そうでなければツールが見つかったビット数を報告します。
2進数を変換すると意味不明な文字になるのはなぜですか?
たいていは、空白のない文字列の中で 1 ビット欠けているか余分にあり、それ以降のバイトがすべてずれています。できればバイトの間に空白を入れてください。そうすれば、不正なグループがあっても崩れるのは 1 文字だけで、残りは正しく読めます。