阅读:1498回复:2
crc32问题
crc32问题
一个新手,在实现crc32算法时,遇到些问题,请高手帮忙看看! 我用如下代码实现crc32校验,查表法,256的表省略了 uchar crcbuff [] = { 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; uint crc; // CRC 码 ulong GenerateCRC32(uchar * DataBuf,ulong len) { ulong oldcrc32; ulong crc32; ulong oldcrc; uint charcnt,t; uchar c; oldcrc32 = 0x00000000; file://初值为0 charcnt=0; while (len--) { t= (oldcrc32 >> 24) & 0xFF; file://要移出的字节的值 oldcrc=crc_32_tab[t]; file://根据移出的字节的值查表 c=DataBuf[charcnt]; file://新移进来的字节值 oldcrc32= (oldcrc32 << 8) | c; file://将新移进来的字节值添在寄存器末字节中 oldcrc32=oldcrc32^oldcrc; file://将寄存器与查出的值进行xor运算 charcnt++; } crc32=oldcrc32; return crc32; } void main(void) { uchar *ptr; crc = 0; // CRC 初值 ptr = crcbuff; // 指向第一个Byte 数据 uint length = sizeof(crcbuff); crc = GenerateCRC32(ptr,length); printf(\"0x%x \\n\",crc); file://while(1); } 可是算出来的结果与JAVA封装好的计算crc32的类所计算的结果不符, 那位帮忙看看是什么问题啊 |
|
|
沙发#
发布于:2005-03-04 13:37
俺一般是这样写的:
UINT ComputeCRC(BYTE *Buffer, int Length) { UINT Result = 0xFFFFFFFF; for(int i = 0; i < Length; i++) { Result = (Result >> 8) ^ CRCTable[(Result & 0x000000FF) ^ Buffer [ i ] ] ; } return ~Result; } [编辑 - 3/4/05 by cool-net] [编辑 - 3/4/05 by cool-net] |
|
|
板凳#
发布于:2005-03-04 14:56
thanks,搞定了!
|
|
|