超Flash Lite入門 ActionScript編 その3 ビット変換

前回のエントリーで説明させて頂いたとおり、Flash Lite 1.1で使われているAction Script 1.1ではビット演算が使えないので文字列からビット変換をするのは割と大変です。
あまり使う機会はないかと思いますが、以下サンプルになります。

map = "0000111"
  add "0100100"
  add "0010110"
  add "0000000"
  add "1101100"
  add "1000011"
  add "1111111";

bmap="\x80\x80\x80\x80\x80\x80\x80";
l=length(map)+2;
for(i=1;i<l;i++){
  //bit変換
  if(substring(map,i,1)){ 
    idx = int((i-1) / 7)+1;
    c= ord(substring(bmap,idx,1));
    tmp = c;
    tmp2 = 1;
    bit = (i-1)%7+1;
    for(j=1;j<bit;j++){
      tmp=int(tmp/2);
      tmp2*=2;
    }
    if(!(tmp%2)) c+=tmp2;
    if(c > 127) c-=128; 
    bmap = substring(bmap,1,idx-1) add mbchr(c) add substring(bmap,idx+1,7-idx);
  }
}

// 検証
map="";
for(y=1;y<8;y++){
  for(x=1;x<8;x++){
    b = ord(substring(bmap,y,1));
    for(j=1;j<x;j++){
      b=int(b/2);
    }
    map = map add (b%2);
  }
  trace(map);
  map="";
}
0000111
0100100
0010110
0000000
1101100
1000011
1111111