as3的BitArray

来源:互联网 发布:马云怎么靠淘宝挣钱 编辑:程序博客网 时间:2024/06/13 02:35

在as3中,针对字节的低级操作可以通过ByteArray对象进行。ByteArray的最小存储对象是单个字节,8个位,最大正整数位256。ByteArray没有提精确到位的操作,位的状态只有两种0或者1,但是占用空间小,因此在很多情况下可以利用这种优势。

下面这个类就实现了精确到位的操作:

package components.utils{import flash.utils.ByteArray;public class BitArray extends ByteArray{public function BitArray(){}public function setBit(index:uint):void{this[index>>3] |= ( 1 << (index & 0x7));}public function unsetBit(index:uint):void{this[index >> 3] &= 0xFF ^ (1 << (index & 0x7));}public function getBit(index:uint):Boolean{return ((this[index >> 3] & (1 << (index & 0x7))) != 0);}}}

它继承自ByteArray,当然我们完全可以用复合而非继承。对ByteArray我们可以设想成每个字节/每8个位之间有一个界限,但这些界限在BitArray中被我们抹去,一个BitArray对象就是连续的位数据。

index >> 3

上面这行代码是将位的位置定位到字节位置,而下面这行代码是取index的低八位,取出来的结果就是位在字节中的位置:

index & 0x7
然后用这个结果,将1左移这个结果的值的位数,并同字节数组中原字节数据进行|=(或等于)操作,这样就将index位置的位数据置为1了。



原创粉丝点击