📄 crc-16.cpp
字号:
// CRC-16.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
unsigned short CRCCheck(//parm:已经读入的数据,数据长度(字节),CRC数据,CRC长度(字节)
const char* dataBuf, unsigned int bufLen, const char* CRCCode, unsigned int codeLen);
using namespace std;
unsigned short int index8[256];
int _tmain(int argc, _TCHAR* argv[])
{
unsigned short int gx16t = 0xA001; //gx16=0x8005
unsigned short int temp(0);
for (unsigned short int src = 0x00; src <= 0xff; ++src)
{
temp = src;
//shift 8 times
for (unsigned int i = 0; i < 8; ++i)
{
if (temp & 1)
{
temp >>= 1;
temp ^= gx16t;
}
else
{
temp >>= 1;
}
}
index8[src] = temp;
}
char data = 0x02;
//char crc[2] = {0xF0, 0X01};// 0xF001;
unsigned short crc = 0xF001;
cout << CRCCheck(&data, 1, (char *)&crc, 2);
system("PAUSE");
return 0;
}
unsigned short CRCCheck(//parm:已经读入的数据,数据长度(字节),CRC数据,CRC长度(字节)
const char* dataBuf, unsigned int bufLen, const char* CRCCode, unsigned int codeLen)
{ //xxxLen大小不包括结束标志符0;
unsigned int i(0);
unsigned short midRlt(0);
unsigned char t[3] = {0, 0, 0};
unsigned short index(0);
for (i = 0; i < bufLen; ++i)
{
midRlt = index8[dataBuf[i] ^ t[1] ^ t[2]];
t[2] = t[0];
memcpy(t, (char*)&midRlt, 2);
}
for (i = 0; i < codeLen; ++i)
{
midRlt = index8[CRCCode[i] ^ t[1] ^ t[2]];
t[2] = t[0];
memcpy(t, (char*)&midRlt, 2);
}
return midRlt;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -