如何将二进制转换为 Base64
- 把比特粘贴到 输入 · 二进制。
- Base64 会随着输入实时显示在 输出 · Base64 中。
- 在输出下方,填充(=) 用于添加或去掉末尾的
=,换行 可以每 64 或 76 个字符断行,用于 PEM 或 MIME。 - 用 复制输出 或 下载 获取结果。要核对结果,可以用 Base64 → 二进制 切换方向,或打开 Base64 转二进制。
输入是如何读取的
转换器会在两种读法之间做选择:
- 分组读取。 如果比特被空格、换行、逗号、分号或
|分开,且没有任何一组超过 8 位,那么每组就是一个字节。允许短于 8 位的组,所以像1001000 1101001这样的 7 位 ASCII 会被读作Hi,而1 0 1是值分别为 1、0、1 的三个字节。 - 连续读取。 如果没有分隔符,或者有任何一组超过 8 位,就把所有比特连在一起,从左开始切成字节。这时总位数必须是 8 的倍数。
两种情况下都会跳过 0b 前缀。遇到 0、1 和分隔符以外的字符时,转换会停止并显示其位置。
示例
| 二进制 | 字节数 | 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 | //// |
每 24 个比特正好变成四个字符,因为 Base64 每次读取比特流中的 6 位。全零对应字母表的第一个字符 A,全一对应最后一个字符 /。输出长度大约是二进制输入的六分之一:每个字节输入 8 个比特,输出 1.33 个字符。
二进制字符串从哪里来
比特串常见于协议规范和数据手册、位掩码常量、进制练习题,以及逐位写出的测试向量。Base64 则是把同样的字节放进 JSON、配置文件或 HTTP 请求头的紧凑方式。如果你已经有这些比特的 hex 形式,用 Hex 转 Base64 粘贴起来更短;如果是十进制的字节值,请使用 十进制转 Base64。
在代码中将二进制转为 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 位或更多数字。只要有一个长组,整个输入就会切换到连续模式,字节边界随之移动。
- 用字母或
O代替了0。 从 PDF 和聊天应用中复制的文本有时含有大写的O或其他形似字符。错误提示会指出其位置。
常见问题
怎么把二进制字符串转换成 Base64?
把比特粘贴到输入框。如果它们按字节分好了组,每组就是一个字节;如果是一整串不间断的比特,就按 8 位一段切开。Base64 会随着输入实时显示。
为什么我的比特转出的 Base64 末尾有 = 号?
因为字节数不是 3 的倍数。两个字节对应一个 =,一个字节对应 ==。如果接收方要求不带填充的 Base64,请取消勾选 填充(=)。
我的比特串长度不是 8 的倍数,怎么办?
Base64 编码的是完整的字节,所以工具会停止并提示它找到了多少个比特。给第一个字节补上缺失的前导零,或者自己把字符串分组,让每组被当作单独的一个字节读取。
能在这里把二进制文件转换成 Base64 吗?
本页读取的是以文本形式输入的 0 和 1。要编码图片、PDF 等真正的文件,请使用 文件转 Base64。