Question

Si je comprends bien les spécifications, un encodeur Base64

a) prend le binaire source et le remplit de zéros pour qu'il soit un multiple de 24 octets.

b) il le convertit ensuite, six bits à la fois, en un ensemble cible de 64 caractères (A..Z, a..z, 0..9, +, -). S'il trouve que les deux derniers octets (16 bits) ont été remplis de zéros, les deux derniers caractères sont transcodés en tant que '=='. S'il constate que le dernier octet (8 bits) a été complété à zéro, le dernier caractère est transcodé en tant que '='.

Ma question est, à l'étape (b), comment savoir que les derniers octets sont des zéros, car ils ont été remplis, et non parce qu'ils font partie des données source binaires valides?

Est-ce que le sous-système responsable de la partie (b) doit savoir ce qui s'est passé pendant la partie (a)

Était-ce utile?

La solution

Le codeur (par opposition au décodeur) saura la longueur des données en entrée et pourra déterminer s'il ne faut rien sortir, "=" ou " == " à la fin. Votre question suppose qu'il n'y a pas de lien entre les deux étapes que vous avez mentionnées, mais ce n'est pas vrai dans les implémentations que j'ai vues.

L'implémentation que je devais écrire ne réalisait pas la première étape, car elle disposait de routines pour extraire les groupes 6 bits du flux d'entrée, incrémentant chaque fois le nombre d'octets. Puis, à la fin, l'expression " byteCount% 3 ". a été utilisé pour décider quelle chaîne ajouter au flux de sortie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top