自力Base64エンコード(日本語未対応

by zahir
速度は出ないだろうけどとりあえず自前でBase64Encodeするサンプル
日本語とか未対応!(そもそも出来るの?
なんのひねりもない構文!美しくない…
♥0 | Line 46 | Modified 2010-01-06 21:00:14 | MIT License
play

ActionScript3 source code

/**
 * Copyright zahir ( http://wonderfl.net/user/zahir )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/asvn
 */

/*
	速度は出ないだろうけどとりあえず自前でBase64Encodeするサンプル
	日本語とか未対応!(そもそも出来るの?
	なんのひねりもない構文!美しくない…
 */
package{
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.utils.ByteArray;
	
	import mx.utils.Base64Decoder;

	public class MyBase64 extends Sprite{
		private var t:TextField = new TextField();
		public function MyBase64(){
			addChild(t);
			t.width = t.height = 465;
			var mp:String = "abcdefg";
			var enc:Base64Enc = new Base64Enc( mp );
			
			t.appendText( "変換前  ::\t\t\t\t\t" + mp +"\n");
			t.appendText( "変換した文字列  ::\t\t\t" + enc.toString() + "\n" );
			
			
			//メンドクサイから用意されているのでデコード
			var dec:Base64Decoder = new Base64Decoder();
			dec.decode( enc.toString() );
			var ba:ByteArray = dec.toByteArray();
			t.appendText( "復号化した文字列  ::\t\t" + ba.readUTFBytes( ba.length ) +"\n");
			 
			 //check("あいうえお");
		}
		private function check( str:String ):void{
			var len:int = str.length;
			for(var i:int =0; i<len; i++){
				var _bit:String = str.charCodeAt( i ).toString( 2 );
				trace(_bit, _bit.length - 1);
			}
		}
	}
}
	
class Base64Enc{
	private const codesetString:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	private var _str:String = "";
	public function Base64Enc( string:String ){ convert( string );}
	public function encode( string:String ):void{ convert( string ); }
	private function convert( string:String ):void{
		
		var i:int, j:int;
		var len:int = string.length;
		var l:int = 0;
		var _2bits:String = "";
		var _conv:String = "";
		var mod:int = 0;
		
		//*
		//文字コードを2進数に変換する。
		for(i=0; i<len; i++){
			var _2bit:String = string.charCodeAt( i ).toString( 2 );
			l = _2bit.length;
			if(l){
				mod = l % 8;
				l = 8 - mod;
				 for(j = 0; j<l; j++) _2bit = "0" + _2bit;
			}
			_2bits += _2bit;
		}
		
		//6bitを一つのチャンクとして扱い、テーブルから変換文字列を取得
		mod = _2bits.length % 6;
		len = 6 - mod;
		for(i=0; i<len; i++) _2bits += "0";
		len = _2bits.length;
		for(i=0;i<len; i+=6){
			var num:int = parseInt( _2bits.substr(i, 6 ), 2 );
			_conv += codesetString.charAt( num );
		}
		
		//4文字でひとつのチャンクとして扱うので、余りがあったら4文字になるように = を足していく
		mod = _conv.length % 4;
		len = 4 - mod;
		for(i=0;i<len;i++) _conv += "=";
		
		//終了
		_str = _conv;
		//*/
	}
	public function toString():String{
		return _str;
	}
}

Forked