[转]AS3类:CRC32校验类

[url]http://www.cnitblog.com/flashlizi/archive/2007/09/10/33198.html[/url]


此类是根据java.util.zip中CRC32类写的AS3版CRC32校验类。


/**
* @name:CRC32(CRC32校验类)
* @usage:根据java.util.zip中CRC32类写的AS3版CRC32校验类
* @author:flashlizi
* @update:2007/06/05
* @example:
var crc=new CRC32();
var ba:ByteArray=new ByteArray();
var str="123";
ba.writeUTFBytes(str);
crc.update(ba,0,3);
trace(crc.getValue().toString(16).toUpperCase());
*/
package com.flashrek.utils{
import flash.utils.ByteArray;
public class CRC32 {
private var crc32:uint;
private static var CRCTable:Array=initCRCTable();
/**
* @usage 更新指定的字节数组的CRC32
* @param buffer:指定的字节数组,arg:arg[0]为offset偏移量,arg[1]为length
指定长度
* 这里可以只指定一个参数buffer,也可以offset,length都指定
* @return void
*/
public function update(buffer:ByteArray,arg):void {
var offset:int=arg[0]?arg[0]:0;
var length:int=arg[1]?arg[1]:buffer.length;
var crc:uint = ~crc32;
for (var i:int=offset; i < length; i++) {
crc = CRCTable[(crc ^ buffer[i]) & 0xFF] ^ (crc >>> 8);
}
crc32 = ~crc;
}
/**
* @usage
* @param
* @return CRC32值
*/
public function getValue():uint {
return crc32 & 0xFFFFFFFF;
}
/**
* @usage 将CRC32重置为初始值
* @param
* @return void
*/
public function reset():void {
crc32 = 0;
}
/**
* @usage 初始化 CRC table, 长度为256.
* @param crcTable:CRC table
* @return 初始化的crcTable,使用标准poly值:0xEDB88320
*/
private static function initCRCTable():Array {
var crcTable:Array=new Array(256);
for (var i:int=0; i < 256; i++) {
var crc:uint=i;
for (var j:int=0; j < 8; j++) {
crc=(crc & 1)?(crc >>> 1) ^ 0xEDB88320:(crc >>> 1);
}
crcTable[i]=crc;
}
return crcTable;
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值