CRC32 直接计算方法

 [ CRC32 计算方法 -- 直接计算法 ]

 ----这里不做什么技术性探讨为什么CRC32可以效应以及CRC32的原理。那不是我所关心的,我所关心的只是能否正确地使用它。CRC32 在网上有众多的POLY(也就是可以看成为种子一样的值)。WinRar 使用的是 0xedb88320。还有ISO标准的其他poly 值。这个值可以通过GOOGLE搜到很多。查表法很优秀,但要用掉无关痛痒的1KB空间。如果想节省1KB空间,就只有直接计算了。

       这里为整理后的直接计算Crc32的代码段:

 

typedef  unsigned int SZ_UINT;

typedef  unsigned char SZ_UCHAR;

 

SZ_UINT GetCrc32Indirect( SZ_UCHAR * DataPtr, int DataLen, int CrcPoly ){
          int dataIdx;
          SZ_UINT crc32, byteTmp;

          int bitLoop;
  
         crc32 = 0xffffffff;
         for( dataIdx = 0; dataIdx < DataLen; dataIdx ++){
                         byteTmp = ( SZ_UINT )( DataPtr[ dataIdx ] ) & 0x000000ff;


                         for( bitLoop = 0; bitLoop < 8; bitLoop++ ){

                                    if((( crc32 ^ byteTmp ) & 1 ) != 0 )
                                                crc32 = (( crc32 >> 1 ) & 0x7fffffff ) ^ CrcPoly;
                                    else
                                                crc32 = (( crc32 >> 1 ) & 0x7fffffff );
                                    byteTmp = ( byteTmp >> 1 ) & 0x7fffffff;
                         }
         }

 

        return crc32 ^ 0xffffffff;
}

 

代码短,没什么解释的。使用Poly = 0xedb88320 计算字串"ABCEE"所得CRC32 = 0x6bc82b94, 与WinRAR 计算只有"ABCEE"5个字符的文本文件的CRC32相同.

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值