自力Base64エンコード(日本語未対応
速度は出ないだろうけどとりあえず自前でBase64Encodeするサンプル
日本語とか未対応!(そもそも出来るの?
なんのひねりもない構文!美しくない…
♥0 |
Line 46 |
Modified 2010-01-06 21:00:14 |
MIT License
archived:2017-03-09 12:59:21
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;
}
}