|
发表于 2014-4-15 16:23:09
|
显示全部楼层
//amo73@126.com
//直接计算CRC32
//常用简式:0xEDB88320——RAR,ZIP所使用
u32 Calculate_CRC32_Direct(u32 CRC32, //CRC32初值
u8 *Buff, //数组
u32 Len) //数组长度
{
u32 i;
CRC32 = ~CRC32;
while(Len--)
{
for(i=0;i<8;i++)
{
if(CRC32 & 1)
CRC32 = (CRC32 >> 1) ^ 0xEDB88320;
else
CRC32 = (CRC32 >> 1);
if((*Buff) & (1<<i))
CRC32 ^= 0xEDB88320;
}
Buff++;//下一个字节
}
return (CRC32 ^ (~0L));
}
示例:
char *test_array = "asdfasdfasdfasdfasdfasdfasdf";
u32 CRC32 = Calculate_CRC32_Direct(0, //符合标准的话,初值必须是0。自定义的话就无所谓了
test_array, //数组
strlen(test_array)); //数组长度 |
|