CRC校验原理及其C语言实现-机电之家网PLC技术网 联系客服

发布时间 : 星期一 文章CRC校验原理及其C语言实现-机电之家网PLC技术网更新完毕开始阅读

0x8B1B,0x9B3A,0x78E4,0x68C5,0x58A6,0x4887,0x3860,0x2841,0x1822,0x0803,//120

0xF9EC,0xE9CD,0xD9AE,0xC98F,0xB968,0xA949,0x992A,0x890B,0x97FB,0x87DA,//130 PLC

0xB7B9,0xA798,0xD77F,0xC75E,0xF73D,0xE71C,0x16F3,0x06D2,0x36B1,0x2690,//140

0x5677,0x4656,0x7635,0x6614,0x85CA,0x95EB,0xA588,0xB5A9,0xC54E,0xD56F,//150

0xE50C,0xF52D,0x04C2,0x14E3,0x2480,0x34A1,0x4446,0x5467,0x6404,0x7425,//160

0xB399,0xA3B8,0x93DB,0x83FA,0xF31D,0xE33C,0xD35F,0xC37E,0x3291,0x22B0,//170

0x12D3,0x02F2,0x7215,0x6234,0x5257,0x4276,0xA1A8,0xB189,0x81EA,0x91CB,//180

0xE12C,0xF10D,0xC16E,0xD14F,0x20A0,0x3081,0x00E2,0x10C3,0x6024,0x7005,//190

0x4066,0x5047,0xDF3F,0xCF1E,0xFF7D,0xEF5C,0x9FBB,0x8F9A,0xBFF9,0xAFD8,//200 PLC资料网

0x5E37,0x4E16,0x7E75,0x6E54,0x1EB3,0x0E92,0x3EF1,0x2ED0,0xCD0E,0xDD2F,//210

0xED4C,0xFD6D,0x8D8A,0x9DAB,0xADC8,0xBDE9,0x4C06,0x5C27,0x6C44,0x7C65,//220

0x0C82,0x1CA3,0x2CC0,0x3CE1,0xFB5D,0xEB7C,0xDB1F,0xCB3E,0xBBD9,0xABF8,//230

0x9B9B,0x8BBA,0x7A55,0x6A74,0x5A17,0x4A36,0x3AD1,0x2AF0,0x1A93,0x0AB2,//240

0xE96C,0xF94D,0xC92E,0xD90F,0xA9E8,0xB9C9,0x89AA,0x998B,0x6864,0x7845,//250

0x4826,0x5807,0x28E0,0x38C1,0x08A2,0x1883 //256 PLC

}; //CRC_Code[]数组就是一个余数表

unsigned short int n_CrcCode16=0; unsigned short int location=0; for(size_t i=0;i!=CodeLength;i++) {

location=(n_CrcCode16 &

0xff)^(CrcSrcCode[i] & 0xff); //查表,事实上就是获取该余数在CRC_Code[]数组的中的位置 n_CrcCode16=((n_CrcCode16>>8) & 0xff) ^ CRC_Code[location]; //从表中取值计算 PLC资料网

}

std::cout<<\is:\ return n_CrcCode16;

} 当然了,你要做的就是给它传递参数,也就是你要

计算的数据,char类型。一般的串口通信、网络通信都是字符型通信,更适用于LINUX里面的字符型设备。这个类是在Suse10.1下面用Kdevelop写的,全部使用ANSI C/C++编写,在Linux和Windows均可以编译通过并且正确运行。 /************************************************************ crc16校验程序

uint crc16(uint crcdata,uchar bufdata) 形参:bufdata 需要校验数据 crcdata 校验后的数据 功能:接收字节crc校验,返回校验值

*************************************************************/

uint crc16(uint crcdata,uchar bufdata) { uchar i; PLC资料网

crcdata^=bufdata; for(i=8;i>0;i--) {