FAST BASE64 / UUENCODING ENCODAGE/DECODAGE

jphippie2 Messages postés 2 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 7 octobre 2008 - 7 oct. 2008 à 14:36
jphippie2 Messages postés 2 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 7 octobre 2008 - 7 oct. 2008 à 14:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46052-fast-base64-uuencoding-encodage-decodage

jphippie2 Messages postés 2 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 7 octobre 2008
7 oct. 2008 à 14:36
Merci pour ce code que je trouve joliment écrit.

Il fonctionne bien à deux petits bugs près:
base64.cpp Ligne 100 : dans le decodeur base 64, remplacer la ligne:
const size_t szout szin/4*3+ ((trail 0)? 0 : ((trail == 1) ? 3 : 2));
par la ligne:
const size_t szout szin/4*3+ ((trail 0)? 0 : ((trail == 1) ? 2 : 1));
Sinon, un caractère supplémentaire non initialisé est ajouté au buffer.

uuencoding.cpp Ligne 6 : remplacer
#define SPtoBACKQ(x) (x == 32) ? 96 : x
par:
#define SPtoBACKQ(x) (x)
En effet, le fait de remplacer systématiquement les blancs par des accents graves n'est pas une bonne idée car le même caractère est utilisé pour le padding en fin de ligne.
Par exemple la chaîne "LA CONSTITUTION Française " est codée avec deux accents graves à la fin plutôt que espace+accent grave. Lors du décodage on obtient une chaîne trop courte d'un caractère!
Rejoignez-nous