Class base64.as

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 039 fois - Téléchargée 26 fois

Contenu du snippet

j'avais besoin d'une class ou d'une fonction base64 en flash...
sur proto.layer51, j'ai trouvé un proto base64, mais mon projet etant en as2, j'ai du convertir en class.
je ne sais plus qui est l'auteur, mais vous trouverez son pseudo sur layer51.

Source / Exemple :


class base64 {
	public var str:String;
	function base64(opString:String) {
		str = opString;
	}
	//
	function set string(_str:String) {
		str = _str;
	}
	//
	function get string() {
		return str;
	}
	//
	function encode(opString:String):String {
		opString != undefined ? str=opString : str=str;
		var base64s:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
		var bits, dual, i:Number = 0, encOut = '';
		while (str.length>=i+3) {
			bits = (str.charCodeAt(i++) & 0xff) << 16 | (str.charCodeAt(i++) & 0xff) << 8 | str.charCodeAt(i++) & 0xff;
			encOut += base64s.charAt((bits & 0x00fc0000) >> 18)+base64s.charAt((bits & 0x0003f000) >> 12)+base64s.charAt((bits & 0x00000fc0) >> 6)+base64s.charAt((bits & 0x0000003f));
		}
		if (str.length-i>0 && str.length-i<3) {
			dual = Boolean(str.length-i-1);
			bits = ((str.charCodeAt(i++) & 0xff) << 16) | (dual ? (str.charCodeAt(i) & 0xff) << 8 : 0);
			encOut += base64s.charAt((bits & 0x00fc0000) >> 18)+base64s.charAt((bits & 0x0003f000) >> 12)+(dual ? base64s.charAt((bits & 0x00000fc0) >> 6) : '=')+'=';
		}
		return encOut;
	}
	//
	function decode(opString:String):String {
		opString != undefined ? str=opString : str=str;
		var base64s:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
		var bits, decOut = '', i:Number = 0;
		for (i=0; i<str.length; i += 4) {
			bits = (base64s.indexOf(str.charAt(i)) & 0xff) << 18 | (base64s.indexOf(str.charAt(i+1)) & 0xff) << 12 | (base64s.indexOf(str.charAt(i+2)) & 0xff) << 6 | base64s.indexOf(str.charAt(i+3)) & 0xff;
			decOut += String.fromCharCode((bits & 0xff0000) >> 16, (bits & 0xff00) >> 8, bits & 0xff);
		}
		if (str.charCodeAt(i-2) == 61) {
			return decOut.substring(0, decOut.length-2);
		} else if (str.charCodeAt(i-1) == 61) {
			return decOut.substring(0, decOut.length-1);
		} else {
			return decOut.substring(0, decOut.length-2);
		}
	}
}

Conclusion :


utilisation 1:
var str:String = "hello world";
var b64:base64 = new base64(str);
var encoded:String = b64.encode();

utilisation 2:
var str:String = "hello world";
var b64:base64 = new base64();
var encoded:String = b64.encode(str);

have fun!

A voir également

Ajouter un commentaire Commentaires
Messages postés
1258
Date d'inscription
mercredi 21 mars 2001
Statut
Membre
Dernière intervention
21 juin 2009
2
Merci pour le bugfix :)
Messages postés
17
Date d'inscription
dimanche 16 octobre 2005
Statut
Membre
Dernière intervention
28 août 2009

A TOUT CEUX QUI LIRAIT CETTE SOURCE

Je croi avoir trouver un moyen pour régler le probleme des deux caractères de fin de chaine dont la venu est plus ou loin alléatoire:

il faut et il suffit de remplacer la ligne 44:
return decOut.substring(0, decOut.length-2);
par
return decOut.substring(0, decOut.length);

cela semble regler le problème pour moi, après reste a voir si cete bidouille tiendra la route

néanmoins, je crois qu'il s'agit tout bêtement d'une petite erreur de la par de l'auteur car quel intéret de faire une dijonction de cas si deux cas on strictement la même réponse
Messages postés
2
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
12 janvier 2009

Je viens d'implémenter ta classe Base 64 et la fonction de décodage supprime les deux derniers caractères lorsque la chaine encodée contient deux points (..), comme c'est le cas ave une URL :

chaine de départ :
http://www.macromedia.fr

encodade base64 :
aHR0cDovL3d3dy5tYWNyb21lZGlhLmZy

décodage base64 :
http://www.macromedia.

As-tu déjà rencontré ce problème ?
Messages postés
1258
Date d'inscription
mercredi 21 mars 2001
Statut
Membre
Dernière intervention
21 juin 2009
2
j'ai pensé a faire une extenstion de la class string.as mais comme je boss sur un projet modulaire qui doit etre distribué, une class a part, ct la meilleur solution...
Messages postés
1158
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
6 août 2010

Oui ca peut être utile...
Pourquoi as tu pas travaillé directement sur une extention de la Class String ? Quoique ca revienne au même....

8/10

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.