CRC-32 校验算法

 

crc32的头文件

===========================分割线===========================

//crc32.h

#ifndef _CRC32_H

#define _CRC32_H



uint crc32( uchar *buf, int len);



#endif

===========================分割线===========================



crc32的源文件

===========================分割线===========================

#include <stdio.h>

#include "crc32.h"



static uint   CRC32[256];

static char   init = 0;



//初始化表

static void init_table()

{

    int   i,j;

    uint   crc;

    for(i = 0;i < 256;i++)

    {

         crc = i;

        for(j = 0;j < 8;j++)

        {

            if(crc & 1)

            {

                 crc = (crc >> 1) ^ 0xEDB88320;

            }

            else

            {

                 crc = crc >> 1;

            }

        }

         CRC32[i] = crc;

    }

}



//crc32实现函数

uint crc32( uchar *buf, int len)

{

    uint ret = 0xFFFFFFFF;

    int   i;

    if( !init )

    {

         init_table();

         init = 1;

    }

    for(i = 0; i < len;i++)

    {

         ret = CRC32[((ret & 0xFF) ^ buf[i])] ^ (ret >> 8);

    }

     ret = ~ret;

    return ret;

}

你可能感兴趣的:(CRC)