Como converter Base64 em array de bytes
- Cole o Base64 na entrada. Espaços em branco, preenchimento ausente, caracteres URL-safe e um prefixo
data:são aceitos. - Escolha o destino abaixo da saída em Linguagem: C / C++, JavaScript, Python, Java, Go, C# ou Rust. JavaScript vem selecionado quando a página abre.
- Use Copiar saída e cole a declaração no seu código. Renomeie
datacomo preferir. - Os menus De e Para acima da ferramenta trocam o formato de entrada ou de saída, por exemplo para ler hex em vez de Base64.
Para voltar de um array para Base64, use Array de bytes para Base64, que lê todos esses formatos.
O que cada linguagem recebe
O Base64 3q2+7wABAgOAf/8K decodifica para 12 bytes, de ad be ef 00 01 02 03 80 7f ff 0a. Esta é a saída para cada configuração de Linguagem:
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
];
Observações sobre a saída:
- Os arrays quebram a linha a cada 12 valores. O Python escreve 16 bytes por string
b'...'e junta dados mais longos entre parênteses, que o Python concatena em tempo de compilação. - O Java usa decimais com sinal porque
(byte) 0xdeexigiria um cast em todo valor acima de0x7f.-34e0xdesão os mesmos bits. - C e Rust declaram o comprimento. O array em C é
unsigned char, então valores acima de 127 cabem sem avisos. - O Go recebe uma vírgula depois do último valor. O compilador exige isso quando a chave de fechamento fica numa linha própria.
- O Python escreve todo byte como
\x.., mesmo os imprimíveis, para que o literal seja inequívoco na leitura e no diff.
Embutir os bytes ou manter o Base64?
Um literal de array de bytes faz sentido quando o programa não tem decodificador Base64 ou não deve gastar tempo decodificando: firmware para microcontroladores, fixtures de teste, uma chave ou certificado pequeno compilado num binário, uma tabela de consulta. O custo é o tamanho no arquivo-fonte. Cada byte ocupa cerca de seis caracteres (0xde, ), mais de quatro vezes o Base64, então 10 KB de dados viram uns 60 KB de código.
Para qualquer coisa que muda ou que passa de alguns kilobytes, mantenha a string Base64 e decodifique na inicialização:
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));
Navegadores mais novos também têm Uint8Array.fromBase64(), explicado em Uint8Array.fromBase64 e toBase64. As páginas de C#, Java, Go, Rust e Python mostram os decodificadores em mais detalhes.
Problemas comuns
- “Base64 inválido”. A string contém um caractere fora do alfabeto ou foi cortada. A mensagem informa a posição; o validador de Base64 explica o que há de errado com uma string quebrada.
- Erros de “narrowing conversion” em C++.
char data[] = {0xde};não compila em C++11 ou posterior, porque ocharsimples tem sinal na maioria das plataformas e 222 não cabe. Mantenha ounsigned chargerado ou useuint8_t. - Saída enorme. Para arquivos grandes,
xxd -i file.binimprime um array C direto, e recursos de embutir como o#embeddo C23 dispensam o array de vez.
Perguntas frequentes
Como converter uma string Base64 em array de bytes no C#?
Em tempo de execução, byte[] data = Convert.FromBase64String(s);. Para deixar os bytes fixos no código, defina a Linguagem como C# aqui e cole a declaração new byte[] { ... } no seu código-fonte.
Por que o array Java tem números negativos?
O byte do Java tem sinal e vai de −128 a 127. Os bytes de 0x80 a 0xff são escritos como −128 a −1, então 0xde aparece como -34. Os bits são os mesmos; b & 0xff devolve o valor sem sinal.
Como transformar Base64 em bytes no Python?
base64.b64decode(s) devolve um objeto bytes. Defina a Linguagem como Python aqui se quiser esse valor escrito como um literal b'\x..'.
A saída em JavaScript é um Uint8Array?
É, const data = new Uint8Array([...]) com valores em hex. Funciona em navegadores e no Node.js; no Node, você pode envolver com Buffer.from(data) se alguma API precisar de um Buffer.