如何将 Base64 转换为十进制
- 把 Base64 粘贴到 输入 · Base64。空格、换行、URL 安全字符和缺失的填充都没问题。
- 字节值显示在 输出 · 十进制字节 中。
- 在输出下方选择 分隔符:空格、
,、,或换行。 - 点击 复制输出 或 下载 这份列表。方向切换 十进制字节 → Base64 或 十进制转 Base64 可以反向转换。
示例
| Base64 | 十进制字节 | 含义 |
|---|---|---|
SGkh | 72 105 33 | 文本 Hi! |
SGkh/w== | 72 105 33 255 | Hi! 加上一个 0xff 字节 |
AQA= | 1 0 | 两个字节,按大端序 16 位数读作 256 |
AAAA | 0 0 0 | 三个零字节 |
//// | 255 255 255 | 三个所有位都为 1 的字节 |
fwAAAQ== | 127 0 0 1 | 以四个原始字节表示的 IPv4 地址 127.0.0.1 |
最后一行展示了一个实用的场景:二进制格式把 IPv4 地址存为四个字节,十进制列表就是熟悉的点分形式,只是少了点。
字节值还是一个大数
这个转换器列出的是字节。把整个 Base64 值读成一个整数会得到另一个答案,而且结果取决于字节顺序:两个字节 1 0 按大端序读是 256,按小端序读是 1。哪个正确取决于生成数据的格式,所以这种转换应该放在代码里,由你明确指定:
import base64
data = base64.b64decode("AQA=")
list(data) # [1, 0]
int.from_bytes(data, "big") # 256
int.from_bytes(data, "little") # 1
保存 32 位计数器、时间戳或大型 ID 的 Base64 也是同理:十进制列表给出的是字节,int.from_bytes 或 JavaScript 中的 DataView 给出的才是数值。
哪些地方会用到十进制字节列表
- JSON。 有些序列化器把二进制数据写成数字数组。Node 的
JSON.stringify(Buffer.from("Hi!"))会得到{"type":"Buffer","data":[72,105,33]}。使用,分隔符并加上方括号,就能得到同样的结构。 - Python 和电子表格。 Python 中的
list(b)会打印十进制值,一列数字(换行分隔符)可以直接粘贴到电子表格中。 - 单片机和串口监视器。 Arduino 代码和很多串口工具以十进制显示字节。如果需要 C 或其他语言中带类型的数组声明,Base64 转字节数组 会写出完整的字面量。
如果你是要阅读这些字节,而不是粘贴到别处,hex 通常更清楚,因为每个字节恰好两个字符:试试 Base64 转 Hex。
在代码中将 Base64 转为十进制
import base64
list(base64.b64decode("SGkh/w==")) # [72, 105, 33, 255]
Array.from(Buffer.from("SGkh/w==", "base64")).join(", "); // '72, 105, 33, 255'
在没有 Buffer 的浏览器中,Array.from(atob(s), c => c.charCodeAt(0)) 能得到同样的数字。Python 和 JavaScript 页面更深入地介绍了解码。
常见问题
Base64 转十进制中的“十进制”指什么?
指把解码后的每个字节写成普通的十进制数。一个字节的取值是 0 到 255,所以输出是该范围内的一串数字,每个字节一个。
怎么把 Base64 转换成一个数,而不是一串数?
在代码中把这些字节读成一个整数。在 Python 中用 int.from_bytes(base64.b64decode(s), "big");对于 AQA=,结果是 256,而本页列出的是字节 1 0。
怎么从 Base64 得到字节的 JSON 数组?
把 分隔符 设为 , ,再在结果两边加上方括号。SGkh 会变成 [72, 105, 33],可以作为 JSON 数组解析。
为什么本页显示 255 的地方,Java 打印的是 -1?
Java 的 byte 类型是有符号的,所以 128 到 255 的字节会打印为 −128 到 −1。比特位完全相同。在 Java 中用 b & 0xff 即可得到这里显示的 0–255 的值。