2008-10-29 6 views
1

Si je comprends bien la spécification, un encodeur base64Comment base 64 gérer les données binaires avec des zéros à la fin

a) prend le binaire source, et les tampons dehors avec des zéros pour être un multiple de 24 octets. B) il le transcode ensuite, six bits à la fois, en un jeu cible de 64 caractères (A..Z, a..z, 0..9, +, -). S'il trouve que les deux derniers octets (16 bits) ont été complétés par zéro, les deux derniers caractères sont transcodés en '=='. S'il trouve que le dernier octet (8 bits) a été rempli de zéros, le dernier caractère est transcodé en '='. Ma question est, à l'étape (b), comment sait-on que les derniers octets sont des zéros parce qu'ils ont été remplis par rapport à des zéros parce qu'ils font partie des données source binaires valides?

Est-ce que le sous-système qui est responsable de la partie (b) doit savoir ce qui se passait pendant la partie (a)

Répondre

3

Le codeur (par opposition au décodeur) va connaître la longueur des données d'entrée et être capable de comprendre si vous ne produisez rien, "=" ou "==" à la fin. Votre question suppose qu'il n'y a pas de connexion entre les deux étapes que vous mentionnez, mais ce n'est pas vrai dans les implémentations que j'ai vues.

La mise en œuvre que je devais écrire ne le faisaient pas la première étape du tout, car il avait des routines pour extraire les groupes 6 bits à partir du flux d'entrée un à la fois, incrémenter byteCount à chaque fois. Puis, à la fin, l'expression "byteCount%3" a été utilisée pour décider quelle chaîne ajouter au flux de sortie.

Questions connexes