Comment convertir du Base64 en tableau d’octets
- Collez le Base64 dans l’entrée. Les espaces, un remplissage manquant, les caractères URL-safe et un préfixe
data:sont acceptés. - Choisissez la cible sous la sortie avec Langage : C / C++, JavaScript, Python, Java, Go, C# ou Rust. JavaScript est sélectionné à l’ouverture de la page.
- Utilisez Copier la sortie et collez la déclaration dans votre code. Renommez
dataselon vos besoins. - Les menus De et Vers au-dessus de l’outil changent le format d’entrée ou de sortie, par exemple pour lire du hex au lieu du Base64.
Pour revenir d’un tableau au Base64, utilisez Tableau d’octets en Base64, qui lit tous ces formats.
Ce que chaque langage obtient
Le Base64 3q2+7wABAgOAf/8K se décode en 12 octets, de ad be ef 00 01 02 03 80 7f ff 0a. Voici la sortie pour chaque réglage de Langage :
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
];
Remarques sur la sortie :
- Les tableaux passent à la ligne après 12 valeurs. Python écrit 16 octets par chaîne
b'...'et regroupe les données plus longues entre parenthèses, que Python concatène à la compilation. - Java utilise des décimaux signés, car
(byte) 0xdedemanderait un cast sur chaque valeur au-delà de0x7f.-34et0xdesont les mêmes bits. - C et Rust déclarent la longueur. Le tableau C est en
unsigned char: les valeurs au-delà de 127 y tiennent sans avertissement. - Go reçoit une virgule finale après la dernière valeur. Le compilateur l’exige quand l’accolade fermante est seule sur sa ligne.
- Python écrit chaque octet sous la forme
\x.., même les caractères imprimables, pour que le littéral soit sans ambiguïté à lire comme à comparer dans un diff.
Intégrer les octets ou garder le Base64 ?
Un littéral de tableau d’octets a du sens quand le programme n’a pas de décodeur Base64 ou ne doit pas perdre de temps à décoder : firmware pour microcontrôleurs, jeux de données de test, petite clé ou petit certificat compilé dans un binaire, table de correspondance. Le prix à payer, c’est la taille du fichier source. Chaque octet prend environ six caractères (0xde, ), plus de quatre fois le Base64 : 10 Ko de données deviennent donc environ 60 Ko de code.
Pour tout ce qui change ou dépasse quelques kilo-octets, gardez la chaîne Base64 et décodez-la au démarrage :
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));
Les navigateurs récents proposent aussi Uint8Array.fromBase64(), présenté dans Uint8Array.fromBase64 et toBase64. Les pages consacrées à C#, Java, Go, Rust et Python détaillent les décodeurs.
Problèmes courants
- « Base64 non valide ». La chaîne contient un caractère hors de l’alphabet ou a été tronquée. Le message donne la position ; le validateur Base64 explique ce qui ne va pas dans une chaîne cassée.
- Erreurs « narrowing conversion » en C++.
char data[] = {0xde};ne compile pas en C++11 ou plus récent, car lecharsimple est signé sur la plupart des plateformes et 222 n’y tient pas. Gardez leunsigned chargénéré, ou utilisezuint8_t. - Sortie énorme. Pour les gros fichiers,
xxd -i file.binaffiche directement un tableau C, et les outils d’intégration comme#embedde C23 évitent complètement le tableau.
FAQ
Comment convertir une chaîne Base64 en tableau d'octets en C# ?
À l’exécution, byte[] data = Convert.FromBase64String(s);. Pour coder les octets en dur, réglez ici Langage sur C# et collez la déclaration new byte[] { ... } dans votre code source.
Pourquoi le tableau Java contient-il des nombres négatifs ?
Le byte de Java est signé et va de −128 à 127. Les octets de 0x80 à 0xff s’écrivent donc de −128 à −1 : 0xde apparaît sous la forme -34. Les bits sont les mêmes ; b & 0xff redonne la valeur non signée.
Comment transformer du Base64 en octets en Python ?
base64.b64decode(s) renvoie un objet bytes. Réglez ici Langage sur Python si vous voulez cette valeur écrite sous forme de littéral b'\x..'.
La sortie JavaScript est-elle un Uint8Array ?
Oui, const data = new Uint8Array([...]) avec des valeurs hex. Elle fonctionne dans les navigateurs et dans Node.js ; dans Node, vous pouvez l’envelopper avec Buffer.from(data) si une API attend un Buffer.