zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    p4841 城市规划
    p2619 [国家集训队2]Tree I [wqs二分学习]
    p3723 [AH2017/HNOI2017]礼物
    p5437 【XR-2】约定
    p5349 幂
    数据结构:结构之美
    你所不知道的传输层
    为什么选择这种技术而不选择另一种技术?
    Internet路由-主机路由表和转发表
    计算机网络----数据链路层(三)
  • 原文地址:https://www.cnblogs.com/ITBread/p/3239976.html
Copyright © 2011-2022 走看看