Cómo convertir Base64 a un array de bytes
- Pega el Base64 en la entrada. Se admiten espacios, relleno ausente, caracteres URL-safe y un prefijo
data:. - Elige el destino bajo la salida con Lenguaje: C / C++, JavaScript, Python, Java, Go, C# o Rust. Al abrir la página está seleccionado JavaScript.
- Usa Copiar salida y pega la declaración en tu código. Cambia el nombre
dataa tu gusto. - Los menús De y A sobre la herramienta cambian el formato de entrada o de salida, por ejemplo para leer hex en lugar de Base64.
Para volver de un array a Base64, usa Array de bytes a Base64, que lee todos estos formatos.
Qué obtiene cada lenguaje
El Base64 3q2+7wABAgOAf/8K se decodifica en 12 bytes, de ad be ef 00 01 02 03 80 7f ff 0a. Esta es la salida con cada ajuste de Lenguaje:
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
];
Notas sobre la salida:
- Los arrays saltan de línea cada 12 valores. Python escribe 16 bytes por cadena
b'...'y une los datos más largos entre paréntesis, que Python concatena en tiempo de compilación. - Java usa decimales con signo porque
(byte) 0xdeexigiría un cast en cada valor por encima de0x7f.-34y0xdeson los mismos bits. - C y Rust declaran la longitud. El array de C es
unsigned char, así que los valores por encima de 127 caben sin avisos. - Go lleva una coma tras el último valor. El compilador la exige cuando la llave de cierre va en su propia línea.
- Python escribe cada byte como
\x.., incluso los imprimibles, para que el literal sea inequívoco al leerlo y al compararlo en un diff.
¿Incrustar los bytes o mantener el Base64?
Un literal de array de bytes tiene sentido cuando el programa no tiene decodificador Base64 o no debe gastar tiempo en decodificar: firmware para microcontroladores, datos de prueba, una clave o un certificado pequeño compilado en el binario, una tabla de consulta. El precio es el tamaño del archivo fuente. Cada byte ocupa unos seis caracteres (0xde, ), más de cuatro veces lo que ocupa en Base64, así que 10 KB de datos se convierten en unos 60 KB de código.
Para cualquier cosa que cambie o pase de unos pocos kilobytes, mantén la cadena Base64 y decodifícala al arrancar:
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));
Los navegadores más recientes también tienen Uint8Array.fromBase64(), que se explica en Uint8Array.fromBase64 y toBase64. Las páginas de C#, Java, Go, Rust y Python muestran los decodificadores con más detalle.
Problemas habituales
- «Base64 no válido». La cadena contiene un carácter fuera del alfabeto o se cortó. El mensaje da la posición; el validador Base64 explica qué le pasa a una cadena rota.
- Errores de «narrowing conversion» en C++.
char data[] = {0xde};no compila en C++11 o posterior, porquechara secas tiene signo en la mayoría de plataformas y 222 no cabe. Mantén elunsigned chargenerado o usauint8_t. - Salida enorme. Para archivos grandes,
xxd -i file.binimprime directamente un array de C, y herramientas de incrustación como#embedde C23 evitan el array por completo.
Preguntas frecuentes
¿Cómo convierto una cadena Base64 en un array de bytes en C#?
En tiempo de ejecución, byte[] data = Convert.FromBase64String(s);. Si prefieres dejar los bytes escritos en el código, pon Lenguaje en C# aquí y pega la declaración new byte[] { ... } en tu código fuente.
¿Por qué el array de Java contiene números negativos?
El byte de Java tiene signo y va de −128 a 127. Los bytes de 0x80 a 0xff se escriben como −128 a −1, así que 0xde aparece como -34. Los bits son los mismos; b & 0xff devuelve el valor sin signo.
¿Cómo paso Base64 a bytes en Python?
base64.b64decode(s) devuelve un objeto bytes. Pon Lenguaje en Python aquí si quieres ese valor escrito como literal b'\x..'.
¿La salida de JavaScript es un Uint8Array?
Sí, const data = new Uint8Array([...]) con valores hex. Funciona en navegadores y en Node.js; en Node puedes envolverlo con Buffer.from(data) si una API necesita un Buffer.