2進数を Base64 に変換する手順
- ビット列を 入力 · 2進数 に貼り付けます。
- 入力と同時に 出力 · Base64 に Base64 が表示されます。
- 出力の下の パディング(=) で末尾の
=を付けたり外したりでき、折り返し を使うと PEM や MIME 用に 64 文字または 76 文字ごとに改行できます。 - 出力をコピー または ダウンロード を使います。結果を確かめるには、Base64 → 2進数 で方向を切り替えるか、Base64 から 2進数へ を開いてください。
入力の読み取り方
変換ツールは 2 通りの読み方のどちらかを選びます。
- グループ分けあり。 ビット列が空白、改行、カンマ、セミコロン、
|で区切られていて、どのグループも 8 ビット以下なら、各グループが 1 バイトになります。短いグループも許されるので、1001000 1101001のような 7 ビットの ASCII はHiと読まれ、1 0 1は値が 1、0、1 の 3 バイトになります。 - 連続。 区切りがない場合や、8 ビットより長いグループがある場合は、すべてのビットをつなげて左から 1 バイトずつ切り分けます。このときは合計が 8 の倍数でなければなりません。
どちらの場合も 0b 接頭辞は読み飛ばします。0、1、区切り文字以外の文字があると、その位置を示して変換が止まります。
例
| 2進数 | バイト数 | Base64 |
|---|---|---|
01001000 01101001 00100001 | 3 | SGkh |
01001000 01101001 | 2 | SGk= |
01001000 | 1 | SA== |
0100100001101001 | 2 | SGk= |
00000000 00000000 00000000 | 3 | AAAA |
11111111 11111111 11111111 | 3 | //// |
Base64 はビットストリームを 6 ビットずつ読むので、24 ビットごとにちょうど 4 文字になります。すべてゼロならアルファベットの最初の文字 A に、すべて 1 なら最後の文字 / に対応します。出力の長さは 2進数の入力の約 6 分の 1 で、1 バイトあたり入力が 8 ビット、出力が 1.33 文字です。
2進数の文字列が使われる場面
ビット列は、プロトコルの仕様書やデータシート、ビットマスクの定数、記数法の演習問題、1 ビットずつ書き出したテストベクターなどに登場します。同じバイト列を JSON、設定ファイル、HTTP ヘッダーにコンパクトに入れる方法が Base64 です。ビット列がすでに 16進数になっているなら 16進数から Base64 へ のほうが貼り付けるのが楽で、10進数のバイト値なら 10進数から Base64 へ を使ってください。
コードで 2進数を Base64 にする
import base64
bits = "0100100001101001"
data = int(bits, 2).to_bytes(len(bits) // 8, "big")
base64.b64encode(data).decode() # 'SGk='
int(bits, 2) は先頭のゼロを落としますが、元の長さを指定した to_bytes で元に戻ります。空白区切りのバイトなら、bytes(int(b, 2) for b in s.split()) のほうが簡単です。
const bits = "01001000 01101001";
Buffer.from(bits.split(" ").map(b => parseInt(b, 2))).toString("base64"); // 'SGk='
逆方向の変換とファイルの扱いは、Python と Node.js のページで紹介しています。
よくある問題
- 「15 ビットはバイト単位で割り切れません」。 メッセージ内のビット数から、どれだけずれているかがわかります。たいていは、切れ目のない文字列の中で
01001000を1001000と書いたように、最初のバイトの先頭のゼロが落ちています。 - グループ分けした入力から予期しない Base64 が出る。 9 桁以上のグループがないか確認してください。長いグループが 1 つでもあると入力全体が連続モードに切り替わり、バイトの区切りがずれます。
0の代わりに英字やOがある。 PDF やチャットアプリからコピーしたテキストには、大文字のOなどの紛らわしい文字が紛れ込むことがあります。エラーメッセージがその位置を示します。
よくある質問
2進数の文字列を Base64 に変換するには?
ビット列を入力欄に貼り付けます。バイトごとにグループ分けされていれば各グループが 1 バイトになり、切れ目のない 1 本の文字列なら 8 ビットずつに切り分けます。Base64 は入力と同時に表示されます。
ビット列から作った Base64 の末尾に = が付くのはなぜですか?
バイト数が 3 の倍数ではないからです。2 バイト余れば = が 1 つ、1 バイトなら == が付きます。受け取る側がパディングなしの Base64 を求めるなら、パディング(=) のチェックを外してください。
ビット列の長さが 8 の倍数ではありません。どうすればよいですか?
Base64 は完全なバイト単位でエンコードするため、ツールは見つかったビット数を示すメッセージを出して止まります。最初のバイトに足りない先頭のゼロを補うか、文字列を自分でグループに分け、各グループが独立した 1 バイトとして読まれるようにしてください。
バイナリファイルをここで Base64 に変換できますか?
このページが読むのは、テキストとして入力された 0 と 1 です。画像や PDF など実際のファイルをエンコードするには ファイルから Base64 へ を使ってください。