如何将字节数组转换为 Base64
- 把数组粘贴到输入框。粘贴整个声明也没问题:类型名、变量名、括号和分号都会被跳过。
- Base64 显示在输出中。输出下方的 填充(=) 和 换行 控制格式。
- 点击 复制输出,或把 到 菜单切换为 Hex、Base64URL 等其他格式。
- 要把 Base64 还原为某种语言的数组声明,请使用 Base64 转字节数组。
可以粘贴什么
下面每一行得到的都是 SGkh,即 H、i、! 三个字节的 Base64:
| 语言 | 输入 |
|---|---|
| C、C++ | unsigned char d[] = {0x48, 0x69, 0x21}; |
| JavaScript | new Uint8Array([72, 105, 33])、Uint8Array.from([72, 105, 33])、Buffer.from([72, 105, 33]) |
| Python | b'Hi!'、b'\x48\x69\x21'、bytes([72, 105, 33])、bytearray(b'Hi!') |
| Java | new byte[]{72, 105, 33}、(byte) 0x48 强制转换 |
| Go | []byte{0x48, 0x69, 0x21} |
| C# | new byte[] { 0x48, 0x69, 0x21 } |
| Rust | [0x48u8, 0x69, 0x21]、vec![72u8, 105, 33] |
| 纯列表 | 72, 105, 33 或 72 105 33 |
值可以是十进制、带 0x 的 hex、带 0b 的二进制、带 0o 的八进制,或者 'H' 这样的 ASCII 字符字面量。u8、U、L 之类的类型后缀会被忽略。Python 字面量按其完整的转义规则读取,包括 \n、\t 和八进制转义;连续的多个 b'...' 片段(例如括号中的多行字面量)会被拼接起来。
有符号字节与取值范围
Java 没有无符号字节,所以从 Java 或 Kotlin 打印出的数组会包含负数。转换器把 −128 到 −1 读作字节 0x80 到 0xff:
| 输入 | 字节 | Base64 |
|---|---|---|
{72, 105, -1} | 48 69 ff | SGn/ |
new byte[]{72, 105, (byte) 0xff, -1} | 48 69 ff ff | SGn//w== |
[-34, -83, -66, -17] | de ad be ef | 3q2+7w== |
任何大于 255 或小于 −128 的值都会让转换停止,并显示该值及其位置。带前导零的数字(例如 072)读作十进制的 72,而不是 C 语言八进制的 58,这符合大多数人粘贴字节值列表时的本意。
本页不读取的格式
- Node 控制台输出的
<Buffer 48 69 21>。 这些值是不带0x的 hex,转换器会把它们当作十进制读取。请把Buffer和>之间的部分复制到 Hex 转 Base64。 - 带引号的 C 字符串,例如
"Hi!"。文本请使用 文本转 Base64,或者把字节写成数组。 - JSON 对象,例如
{"type":"Buffer","data":[72,105,33]}。只粘贴[72,105,33]部分,在这里或 十进制转 Base64 中都可以。
在代码中将字节数组转为 Base64
String b64 = java.util.Base64.getEncoder().encodeToString(new byte[] {72, 105, 33}); // "SGkh"
string b64 = Convert.ToBase64String(new byte[] { 0x48, 0x69, 0x21 }); // "SGkh"
import base64
base64.b64encode(bytes([72, 105, 33])).decode() # 'SGkh'
btoa(String.fromCharCode(...new Uint8Array([72, 105, 33]))); // 'SGkh'
展开运算符会把每个字节作为单独的参数传入,所以遇到大数组会失败:在 Node 24 中,元素数在 125,000 到 200,000 之间的某处就会抛出 Maximum call stack size exceeded,而且不同引擎的上限不一样。对于大数据,在 Node 中用 Buffer.from(arr).toString("base64"),在新版浏览器中用 arr.toBase64(),就能避免这个问题;参见 Uint8Array.toBase64。各语言的更多内容:Java、C#、Python、JavaScript。
常见问题
在 Java 中怎么把 byte[] 转成 Base64?
java.util.Base64.getEncoder().encodeToString(bytes)。要检查写死在代码里的数组,把整个 new byte[] { ... } 声明粘贴到这里即可,强制类型转换和负数都没问题。
能粘贴 Python 的 bytes 字面量吗?
能。b'Hi!'、b'\x48\x69\x21'、\041 这样的八进制转义、bytes([72, 105, 33]),以及分成多行的多个字面量都可以。
为什么提示超出一个字节的范围?
有某个值大于 255 或小于 −128。这通常说明数组实际上是 16 位或 32 位整数,例如 short[] 或 int[],需要先按选定的字节序拆分成字节。
不带 0x 的数字会被当作 hex 读取吗?
不会。单独的 48 就是十进制的 48。hex 值需要 0x 前缀;或者改为粘贴到 Hex 转 Base64,它能读取不带前缀的 hex。