10進数を Base64 に変換する手順
- 数値を 入力 · 10進数バイト に貼り付けます。数値 1 つが 1 バイトです。
- 入力と同時に 出力 · Base64 に Base64 が表示されます。
- 出力の下の パディング(=) で末尾の
=を残すか外すかを選び、折り返し で長い出力を 64 文字か 76 文字で改行できます。 - 出力をコピー を押すか、Base64 → 10進数バイト に切り替えて結果を確かめます。Base64 から 10進数へ は、同じツールを逆方向にしたものです。
入力形式
| 入力 | 出どころ | Base64 |
|---|---|---|
72 105 33 | 数値を並べただけのリスト | SGkh |
[72, 105, 33] | JSON、Python の list(b) | SGkh |
{72, 105, 33} | C や Java の初期化子 | SGkh |
72;105;33 | ; 区切りの CSV エクスポート | SGkh |
[72, 105, -1] | Java の Arrays.toString(bytes) | SGn/ |
072 105 | ゼロ埋めした列 | SGk= |
ゼロ埋めした数値は 10進数として読むので、072 は 72 です。各値は −128〜255 の整数でなければなりません。範囲外の値があると変換が止まり、どの値かがメッセージで示されます。72.105 のように紛れ込んだ英字やドットは位置とともに報告され、表示 でその文字が選択されます。
リストに 48 69 21 のような 16進数の値が入っていると、10進数の 48、69、21 として読まれ、違う結果になります。その場合は 16進数から Base64 へ を使ってください。0x 付きの値、キャスト、型名を含むソースコードからコピーした配列なら、バイト配列から Base64 へ のほうが適しています。
10進数のバイトリストが出てくる場面
10進数のバイトリストのほとんどは、プログラミング言語がバイナリデータを既定の方法で出力したものです。
| 出力元 | Hi! に対する出力 |
|---|---|
Python の list(b"Hi!") | [72, 105, 33] |
Node.js の JSON.stringify(Buffer.from("Hi!")) | {"type":"Buffer","data":[72,105,33]} |
Java の Arrays.toString("Hi!".getBytes()) | [72, 105, 33] |
JavaScript の Array.from(new TextEncoder().encode("Hi!")) | [ 72, 105, 33 ] |
こうしたリストを Base64 に変換すれば、設定ファイル、テスト用のフィクスチャ、API リクエストに入れられるコンパクトな文字列になります。72, 105, 33 は 11 文字ですが、Base64 の SGkh は 4 文字です。
コードで 10進数を Base64 にする
import base64
base64.b64encode(bytes([72, 105, 33])).decode() # 'SGkh'
bytes() は負の値に対して ValueError: bytes must be in range(0, 256) を送出します。Java 形式の符号付きバイトは、先に [v & 0xff for v in values] で変換してください。
Buffer.from([72, 105, 33]).toString("base64"); // 'SGkh'
Buffer.from は各値を何も言わずに 256 で割った余りにするので、-1 は 255 になり、256 は黙って 0 になります。上のツールは 256 を拒否するので、実はバイトではないリストに気づけます。詳しくは Python と Node.js のページをご覧ください。
バイトではない数値
ユーザー ID、タイムスタンプ、カウンターのような 1 つの大きな数値は、何バイトをどの順で使うかを決めるまで、決まった Base64 の形を持ちません。Unix 時刻の 1700000000 は、4 バイトのビッグエンディアンなら ZVPxAA==、8 バイトなら AAAAAGVT8QA= です。受け取る側のシステムが求めるレイアウトを選び、コードでエンコードしてください。このページが 255 を超える値をあえて拒否するのは、16 ビットや 32 ビットの数値のリストがバイトと取り違えられないようにするためです。
よくある質問
1000 のような 1 つの数値を Base64 に変換できますか?
このページではできません。ここでは数値 1 つが 1 バイトで、1000 は収まらないからです。その数値を何バイトで、どのバイト順にするかを決めてから、そのバイト列をエンコードしてください。Python なら base64.b64encode((1000).to_bytes(2, "big")) で A+g= が得られます。
数値の間にはどんな区切り文字を使えますか?
空白、タブ、改行、カンマ、セミコロンを、どう組み合わせても使えます。角括弧、波括弧、丸括弧は無視するので、JSON の配列や C の初期化子もそのまま貼り付けられます。
負の数はどう扱われますか?
−1〜−128 は、Java や Kotlin が出力するのと同じく符号付きバイトとして読みます。−1 は 255、−128 は 128 です。−128 より小さい値はエラーになります。
JSON のバイト配列を Base64 に変換するには?
配列を括弧ごと貼り付けてください。Node の {"type":"Buffer","data":[...]} オブジェクトなら、data の配列だけを貼り付けます。