如何将 Base64 转换为二进制
- 把 Base64 粘贴到 输入 · Base64。换行、空格、
data:前缀、URL 安全的-和_以及缺失的填充都可以接受。 - 每个解码后的字节以 8 位的形式显示在 输出 · 二进制 中。
- 在输出下方选择 分隔符:空格(默认)、无、
,、,或换行。 - 点击 复制输出 或 下载 这些比特。保存字节 则会把解码后的数据另存为文件,扩展名根据内容确定。
方向切换 二进制 → Base64 或 二进制转 Base64 可以反向转换。
Base64 字符如何变成比特
每个 Base64 字符代表 6 位,即它在字母表中的位置,从 A = 0 到 / = 63。四个字符共 24 位,解码器把它们重新分成三个 8 位字节。以 SGkh 为例:
| 字符 | S | G | k | h |
|---|---|---|---|---|
| 值 | 18 | 6 | 36 | 33 |
| 6 位 | 010010 | 000110 | 100100 | 100001 |
连起来就是 010010000110100100100001。按字节切分:
| 字节 | 01001000 | 01101001 | 00100001 |
|---|---|---|---|
| 十进制 | 72 | 105 | 33 |
| 文本 | H | i | ! |
所以 SGkh 就是 Hi!,二进制输出为 01001000 01101001 00100001。字符边界和字节边界每 24 位才对齐一次,所以一个错误的 Base64 字符可能会损坏相邻的两个字节。分步讲解 从编码器的角度演示了同样的过程。
填充与剩余的比特
当数据不是 3 字节的倍数时,最后一组就不完整。Hi 有 16 位,需要三个 Base64 字符(18 位)。多出的 2 位置为零,再用 = 把这一组补足为四个字符:
| Base64 | 承载的位数 | 输出的字节 |
|---|---|---|
SGkh | 24 | 01001000 01101001 00100001 |
SGk= | 18,其中 2 位是填充位 | 01001000 01101001 |
SA== | 12,其中 4 位是填充位 | 01001000 |
填充位永远不会出现在输出中。为什么会有 =,见 填充 页面。
按位查看在哪些场景有用
- 协议和文件头经常把多个是或否的标志打包进一个字节。以二进制显示时可以直接读出这些位字段,不用在脑子里换算 hex 数字。
- 要比较两个值,就把它们都解码,并把 分隔符 设为换行,逐行对比;单个翻转的位一眼就能看出来。
- 在教学和解谜中,把 8 位字节和 6 位分组放在一起看,就能看出 33% 的体积开销从何而来。
超过几十个字节的数据,hex 更容易阅读:Base64 转 Hex 用四分之一的篇幅显示同样的字节。二进制输出每个字节占 8 个字符,外加分隔符,所以一百万个 Base64 字符(750,000 字节)会变成约 675 万个字符的二进制。输出框只显示前 200 万个字符;复制输出 和 下载 始终提供完整结果。
在代码中将 Base64 转为二进制
import base64
" ".join(f"{b:08b}" for b in base64.b64decode("SGkh"))
# '01001000 01101001 00100001'
Array.from(Buffer.from("SGkh", "base64"), b => b.toString(2).padStart(8, "0")).join(" ");
// '01001000 01101001 00100001'
如果要把解码后的字节写入二进制文件,在 Python 中用 open("out.bin", "wb").write(base64.b64decode(s)),在 Node 中用 fs.writeFileSync("out.bin", Buffer.from(s, "base64"))。Python 和 Node.js 页面有完整的文件示例。
常见问题
Base64 转二进制和 Base64 解码是一回事吗?
解码过程相同,只是显示方式不同。本页把字节写成 0 和 1。如果你想要的是以文件形式保存的字节,也就是“二进制”常见的另一种含义,请使用 Base64 转文件 或本页的 保存字节 按钮。
Base64 每个字符是 6 位,为什么每个字节显示 8 位?
输出显示的是字节,而一个字节是 8 位。Base64 则把同一串比特切成 6 位一段,所以 3 个字节(24 位)总是对应 4 个字符。
怎么得到不带空格的比特串?
把 分隔符 设为“无”。这样 SGk= 会输出一整串 0100100001101001。
填充位去哪儿了?
被丢弃了。在 SGk= 中,最后一个字符承载 6 位,但只有 4 位属于数据;另外 2 位是补足字符用的零,解码器会把它们丢掉。