栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言CRC校验程序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言CRC校验程序

#include "stdio.h"
#include "string.h"

//CRC校验程序
unsigned short CrcCheck(char*bufOut,char *buf,char length)
{
    unsigned short tmp,CRC;
    char i,j,CRCHi, CRCLo;
    
     memcpy(bufOut,buf,length);    //前端存储原字符
    bufOut[length+2]='';        //后端存储结束符
             
    CRC=0xFFFF;
    for(i=0; i     {
        CRC=buf[i]^CRC;
        for(j=0;j<8;j++)
        {    
            tmp=CRC&0x0001;
            CRC=CRC>>1;
            if(tmp)
            CRC=CRC^0xA001;
        }
    }
    
    CRCLo=CRC&0xFF;
    CRCHi=CRC>>8;
    
    bufOut[length]=CRCLo;    //CRC校验码存在原字符后面(低前高后)
    bufOut[length+1]=CRCHi;    //CRC校验码存在原字符后面(低前高后)
    
    return CRC;    //返回CRC校验码(高前低后)
}

int main()
{
    char i;    
    char buf[4]={0x11,0x22,0x33,''};    //需要校验的原数组
    char buf1[6],buf2[8];                //定义一次校验和二次校验字节数组        
    unsigned short crc1,crc2;            //定义一次、二次校验码存储变量
    char CRC1Hi, CRC1Lo;                //定义校验码的高低位字节存储变量

    crc1=CrcCheck(buf1,buf,3);        //一次校验
    crc2=CrcCheck(buf2,buf1,5);        //二次校验

    printf("一次校验码(高低):crc1 = %04hx n",crc1);    //查看一次校验码
    printf("二次校验码(高低):crc2 = %04hx n",crc2);    //查看二次校验码是否是零,是零有效

    printf("带校验码的新数组(低高):");
    for(i=0;i<5;i++)
    {    
        printf("%02x ",buf1[i]);
    }
    printf("n");
    
    printf("数组尾部十六进制校验码(低高):");
    for(i=3;i<5;i++)
    {    
        printf("%02x ",buf1[i]);    
    }
    printf("n");
    
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1038457.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号