⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc-16.cpp

📁 该文件是关于CRC校验的
💻 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 + -