上传文件
  1. base64hub
  2. 其他进制编码
  3. Base64 转字节数组

Base64 转字节数组:C、Java、Python、Go、C#

粘贴 Base64,得到解码后字节的数组字面量,可直接粘贴到源代码中。在输出下方选择语言:C/C++、JavaScript、Python、Java、Go、C# 或 Rust。

免费 无需注册,不限次数 本地 不上传任何内容 7 种 语言,从 C 到 Rust 更新于 2026年10月27日
输入 0字节 0 B输出 0

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何将 Base64 转换为字节数组

  1. 把 Base64 粘贴到输入框。空白字符、缺失的填充、URL 安全字符和 data: 前缀都可以接受。
  2. 在输出下方的 语言 中选择目标:C / C++、JavaScript、Python、Java、Go、C# 或 Rust。页面打开时默认选中 JavaScript。
  3. 点击 复制输出,把声明粘贴到代码中。data 可以改成你需要的名字。
  4. 工具上方的 从 和 到 菜单可以切换输入或输出格式,例如改为读取 hex 而不是 Base64。

要把数组转回 Base64,请使用 字节数组转 Base64,它能读取上述所有格式。

各语言的输出

Base64 3q2+7wABAgOAf/8K 解码后是 12 个字节:de ad be ef 00 01 02 03 80 7f ff 0a。下面是每种 语言 设置下的输出:

const unsigned char data[12] = {
    0xde, 0xad, 0xbe, 0xef, 0x00, 0x01, 0x02, 0x03, 0x80, 0x7f, 0xff, 0x0a
};
const data = new Uint8Array([
    0xde, 0xad, 0xbe, 0xef, 0x00, 0x01, 0x02, 0x03, 0x80, 0x7f, 0xff, 0x0a
]);
data = b'\xde\xad\xbe\xef\x00\x01\x02\x03\x80\x7f\xff\x0a'
byte[] data = new byte[] {
    -34, -83, -66, -17, 0, 1, 2, 3, -128, 127, -1, 10
};
data := []byte{
	0xde, 0xad, 0xbe, 0xef, 0x00, 0x01, 0x02, 0x03, 0x80, 0x7f, 0xff, 0x0a,
}
byte[] data = new byte[] {
    0xde, 0xad, 0xbe, 0xef, 0x00, 0x01, 0x02, 0x03, 0x80, 0x7f, 0xff, 0x0a
};
let data: [u8; 12] = [
    0xde, 0xad, 0xbe, 0xef, 0x00, 0x01, 0x02, 0x03, 0x80, 0x7f, 0xff, 0x0a
];

关于输出的几点说明:

  • 数组每行 12 个值后换行。Python 每个 b'...' 字符串写 16 个字节,更长的数据放在括号内拼接,Python 会在编译时把它们连起来。
  • Java 使用有符号十进制数,因为写成 (byte) 0xde 的话,每个大于 0x7f 的值都需要强制类型转换。-34 和 0xde 是相同的比特位。
  • C 和 Rust 会声明长度。C 数组的类型是 unsigned char,所以大于 127 的值不会引发警告。
  • Go 的最后一个值后面带逗号。右花括号单独占一行时,编译器要求必须有这个逗号。
  • Python 把每个字节都写成 \x..,即使是可打印字符也一样,这样字面量在阅读和 diff 时都不会有歧义。

嵌入字节,还是保留 Base64?

当程序没有 Base64 解码器,或者不应该花时间解码时,字节数组字面量就很合适:单片机固件、测试数据、编译进二进制文件的小型密钥或证书、查找表。代价是源文件的体积。每个字节大约占六个字符(0xde, ),是 Base64 的四倍多,所以 10 KB 的数据会变成大约 60 KB 的代码。

对于会变化或大于几 KB 的数据,请保留 Base64 字符串,在启动时解码:

import base64
data = base64.b64decode("3q2+7wABAgOAf/8K")
byte[] data = Convert.FromBase64String("3q2+7wABAgOAf/8K");
byte[] data = java.util.Base64.getDecoder().decode("3q2+7wABAgOAf/8K");
const data = Uint8Array.from(atob("3q2+7wABAgOAf/8K"), c => c.charCodeAt(0));

较新的浏览器还提供 Uint8Array.fromBase64(),见 Uint8Array.fromBase64 与 toBase64。C#、Java、Go、Rust 和 Python 的语言页面更详细地介绍了各自的解码器。

常见问题

  • “无效的 Base64”。 字符串中含有字母表以外的字符,或者被截断了。错误信息会给出位置;Base64 校验工具 会解释损坏的字符串哪里出了问题。
  • C++ 中的“narrowing conversion”错误。 char data[] = {0xde}; 在 C++11 及更高版本中无法编译,因为在大多数平台上普通的 char 是有符号的,放不下 222。请保留生成的 unsigned char,或改用 uint8_t。
  • 输出太大。 对于大文件,xxd -i file.bin 可以直接输出 C 数组,而 C23 的 #embed 等嵌入方式则完全不需要数组。

常见问题

在 C# 中怎么把 Base64 字符串转换成字节数组?

运行时用 byte[] data = Convert.FromBase64String(s);。如果想把字节硬编码进代码,就在这里把 语言 设为 C#,再把 new byte[] { ... } 声明粘贴到源代码中。

为什么 Java 数组里有负数?

Java 的 byte 是有符号的,范围是 −128 到 127。0x80 到 0xff 的字节会写成 −128 到 −1,所以 0xde 显示为 -34。比特位完全相同;b & 0xff 可以得到无符号值。

在 Python 中怎么把 Base64 转成字节?

base64.b64decode(s) 返回一个 bytes 对象。如果想把这个值写成 b'\x..' 字面量,在这里把 语言 设为 Python 即可。

JavaScript 输出的是 Uint8Array 吗?

是的,形式为 const data = new Uint8Array([...]),值用 hex 表示。它可以在浏览器和 Node.js 中运行;在 Node 中如果 API 需要 Buffer,可以用 Buffer.from(data) 包一层。