• 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;
    }
  • 相关阅读:
    225. Implement Stack using Queues
    150. Evaluate Reverse Polish Notation
    159 Longest Substring with At Most Two Distinct Characters
    142. Linked List Cycle II
    打印沙漏 (20 分)
    人见人爱A-B
    人见人爱A+B
    杨辉三角
    进制转换
    汉字统计
  • 原文地址:https://www.cnblogs.com/ITBread/p/3239976.html
Copyright © 2020-2023  润新知