📄 zcrc.cpp
字号:
/* ZCRC.h
CRC算法的一个实现程序。
张忠杰 2004-11-08
*/
#include "stdafx.h"
#include "ZCRC.h"
//////////////////////////////////////////////////////////////////////
// CZCRC 类的成员
//////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------
// CZCRC 类的静态变量
// 注意:因最高位一定为“1”,故略去
// CRC-16 = X16 + X15 + X2 + X0
//static const unsigned short cnCRC_16 = 0x8005;
// CRC-CCITT = X16 + X12 + X5 + X0,据说这个 16 位 CRC 多项式比上一个要好
//static const unsigned short cnCRC_CCITT = 0x1021;
//CRC-CCITT 计算表 0x1021
// CRC-CCITT = X16 + X12 + X5 + X0
unsigned short CZCRC::TCRC_CCITT[256]= {
0x0000,0x1021,0x2042,0x3063,0x4084,0x50A5,0x60C6,0x70E7,
0x8108,0x9129,0xA14A,0xB16B,0xC18C,0xD1AD,0xE1CE,0xF1EF,
0x1231,0x0210,0x3273,0x2252,0x52B5,0x4294,0x72F7,0x62D6,
0x9339,0x8318,0xB37B,0xA35A,0xD3BD,0xC39C,0xF3FF,0xE3DE,
0x2462,0x3443,0x0420,0x1401,0x64E6,0x74C7,0x44A4,0x5485,
0xA56A,0xB54B,0x8528,0x9509,0xE5EE,0xF5CF,0xC5AC,0xD58D,
0x3653,0x2672,0x1611,0x0630,0x76D7,0x66F6,0x5695,0x46B4,
0xB75B,0xA77A,0x9719,0x8738,0xF7DF,0xE7FE,0xD79D,0xC7BC,
0x48C4,0x58E5,0x6886,0x78A7,0x0840,0x1861,0x2802,0x3823,
0xC9CC,0xD9ED,0xE98E,0xF9AF,0x8948,0x9969,0xA90A,0xB92B,
0x5AF5,0x4AD4,0x7AB7,0x6A96,0x1A71,0x0A50,0x3A33,0x2A12,
0xDBFD,0xCBDC,0xFBBF,0xEB9E,0x9B79,0x8B58,0xBB3B,0xAB1A,
0x6CA6,0x7C87,0x4CE4,0x5CC5,0x2C22,0x3C03,0x0C60,0x1C41,
0xEDAE,0xFD8F,0xCDEC,0xDDCD,0xAD2A,0xBD0B,0x8D68,0x9D49,
0x7E97,0x6EB6,0x5ED5,0x4EF4,0x3E13,0x2E32,0x1E51,0x0E70,
0xFF9F,0xEFBE,0xDFDD,0xCFFC,0xBF1B,0xAF3A,0x9F59,0x8F78,
0x9188,0x81A9,0xB1CA,0xA1EB,0xD10C,0xC12D,0xF14E,0xE16F,
0x1080,0x00A1,0x30C2,0x20E3,0x5004,0x4025,0x7046,0x6067,
0x83B9,0x9398,0xA3FB,0xB3DA,0xC33D,0xD31C,0xE37F,0xF35E,
0x02B1,0x1290,0x22F3,0x32D2,0x4235,0x5214,0x6277,0x7256,
0xB5EA,0xA5CB,0x95A8,0x8589,0xF56E,0xE54F,0xD52C,0xC50D,
0x34E2,0x24C3,0x14A0,0x0481,0x7466,0x6447,0x5424,0x4405,
0xA7DB,0xB7FA,0x8799,0x97B8,0xE75F,0xF77E,0xC71D,0xD73C,
0x26D3,0x36F2,0x0691,0x16B0,0x6657,0x7676,0x4615,0x5634,
0xD94C,0xC96D,0xF90E,0xE92F,0x99C8,0x89E9,0xB98A,0xA9AB,
0x5844,0x4865,0x7806,0x6827,0x18C0,0x08E1,0x3882,0x28A3,
0xCB7D,0xDB5C,0xEB3F,0xFB1E,0x8BF9,0x9BD8,0xABBB,0xBB9A,
0x4A75,0x5A54,0x6A37,0x7A16,0x0AF1,0x1AD0,0x2AB3,0x3A92,
0xFD2E,0xED0F,0xDD6C,0xCD4D,0xBDAA,0xAD8B,0x9DE8,0x8DC9,
0x7C26,0x6C07,0x5C64,0x4C45,0x3CA2,0x2C83,0x1CE0,0x0CC1,
0xEF1F,0xFF3E,0xCF5D,0xDF7C,0xAF9B,0xBFBA,0x8FD9,0x9FF8,
0x6E17,0x7E36,0x4E55,0x5E74,0x2E93,0x3EB2,0x0ED1,0x1EF0
};
//CRC-32 计算表 0x04C10DB7
// CRC-32 = X32 + X26 + X23 + X22 + X16 + X11 + X10 + X8 + X7 + X5 + X4 + X2 + X1 + X0
unsigned long CZCRC::TCRC_32[256]={
0x00000000,0x04C10DB7,0x09821B6E,0x0D4316D9,0x130436DC,0x17C53B6B,0x1A862DB2,0x1E472005,
0x26086DB8,0x22C9600F,0x2F8A76D6,0x2B4B7B61,0x350C5B64,0x31CD56D3,0x3C8E400A,0x384F4DBD,
0x4C10DB70,0x48D1D6C7,0x4592C01E,0x4153CDA9,0x5F14EDAC,0x5BD5E01B,0x5696F6C2,0x5257FB75,
0x6A18B6C8,0x6ED9BB7F,0x639AADA6,0x675BA011,0x791C8014,0x7DDD8DA3,0x709E9B7A,0x745F96CD,
0x9821B6E0,0x9CE0BB57,0x91A3AD8E,0x9562A039,0x8B25803C,0x8FE48D8B,0x82A79B52,0x866696E5,
0xBE29DB58,0xBAE8D6EF,0xB7ABC036,0xB36ACD81,0xAD2DED84,0xA9ECE033,0xA4AFF6EA,0xA06EFB5D,
0xD4316D90,0xD0F06027,0xDDB376FE,0xD9727B49,0xC7355B4C,0xC3F456FB,0xCEB74022,0xCA764D95,
0xF2390028,0xF6F80D9F,0xFBBB1B46,0xFF7A16F1,0xE13D36F4,0xE5FC3B43,0xE8BF2D9A,0xEC7E202D,
0x34826077,0x30436DC0,0x3D007B19,0x39C176AE,0x278656AB,0x23475B1C,0x2E044DC5,0x2AC54072,
0x128A0DCF,0x164B0078,0x1B0816A1,0x1FC91B16,0x018E3B13,0x054F36A4,0x080C207D,0x0CCD2DCA,
0x7892BB07,0x7C53B6B0,0x7110A069,0x75D1ADDE,0x6B968DDB,0x6F57806C,0x621496B5,0x66D59B02,
0x5E9AD6BF,0x5A5BDB08,0x5718CDD1,0x53D9C066,0x4D9EE063,0x495FEDD4,0x441CFB0D,0x40DDF6BA,
0xACA3D697,0xA862DB20,0xA521CDF9,0xA1E0C04E,0xBFA7E04B,0xBB66EDFC,0xB625FB25,0xB2E4F692,
0x8AABBB2F,0x8E6AB698,0x8329A041,0x87E8ADF6,0x99AF8DF3,0x9D6E8044,0x902D969D,0x94EC9B2A,
0xE0B30DE7,0xE4720050,0xE9311689,0xEDF01B3E,0xF3B73B3B,0xF776368C,0xFA352055,0xFEF42DE2,
0xC6BB605F,0xC27A6DE8,0xCF397B31,0xCBF87686,0xD5BF5683,0xD17E5B34,0xDC3D4DED,0xD8FC405A,
0x6904C0EE,0x6DC5CD59,0x6086DB80,0x6447D637,0x7A00F632,0x7EC1FB85,0x7382ED5C,0x7743E0EB,
0x4F0CAD56,0x4BCDA0E1,0x468EB638,0x424FBB8F,0x5C089B8A,0x58C9963D,0x558A80E4,0x514B8D53,
0x25141B9E,0x21D51629,0x2C9600F0,0x28570D47,0x36102D42,0x32D120F5,0x3F92362C,0x3B533B9B,
0x031C7626,0x07DD7B91,0x0A9E6D48,0x0E5F60FF,0x101840FA,0x14D94D4D,0x199A5B94,0x1D5B5623,
0xF125760E,0xF5E47BB9,0xF8A76D60,0xFC6660D7,0xE22140D2,0xE6E04D65,0xEBA35BBC,0xEF62560B,
0xD72D1BB6,0xD3EC1601,0xDEAF00D8,0xDA6E0D6F,0xC4292D6A,0xC0E820DD,0xCDAB3604,0xC96A3BB3,
0xBD35AD7E,0xB9F4A0C9,0xB4B7B610,0xB076BBA7,0xAE319BA2,0xAAF09615,0xA7B380CC,0xA3728D7B,
0x9B3DC0C6,0x9FFCCD71,0x92BFDBA8,0x967ED61F,0x8839F61A,0x8CF8FBAD,0x81BBED74,0x857AE0C3,
0x5D86A099,0x5947AD2E,0x5404BBF7,0x50C5B640,0x4E829645,0x4A439BF2,0x47008D2B,0x43C1809C,
0x7B8ECD21,0x7F4FC096,0x720CD64F,0x76CDDBF8,0x688AFBFD,0x6C4BF64A,0x6108E093,0x65C9ED24,
0x11967BE9,0x1557765E,0x18146087,0x1CD56D30,0x02924D35,0x06534082,0x0B10565B,0x0FD15BEC,
0x379E1651,0x335F1BE6,0x3E1C0D3F,0x3ADD0088,0x249A208D,0x205B2D3A,0x2D183BE3,0x29D93654,
0xC5A71679,0xC1661BCE,0xCC250D17,0xC8E400A0,0xD6A320A5,0xD2622D12,0xDF213BCB,0xDBE0367C,
0xE3AF7BC1,0xE76E7676,0xEA2D60AF,0xEEEC6D18,0xF0AB4D1D,0xF46A40AA,0xF9295673,0xFDE85BC4,
0x89B7CD09,0x8D76C0BE,0x8035D667,0x84F4DBD0,0x9AB3FBD5,0x9E72F662,0x9331E0BB,0x97F0ED0C,
0xAFBFA0B1,0xAB7EAD06,0xA63DBBDF,0xA2FCB668,0xBCBB966D,0xB87A9BDA,0xB5398D03,0xB1F880B4
};
//-------------------------------------------------------------------
// CZCRC 类的静态方法
unsigned short CZCRC::CRC16(void *Data,int Len)
{
int i;
unsigned short nAccum = 0;
unsigned char *pData = (unsigned char *)Data;
for ( i = 0; i < Len; i++ )
nAccum = ( nAccum << 8 ) ^ TCRC_CCITT[( nAccum >> 8 ) ^ *pData++];
return nAccum;
}
unsigned long CZCRC::CRC32(void *Data,int Len)
{
int i;
unsigned long nAccum = 0;
unsigned char *pData = (unsigned char *)Data;
for ( i = 0; i < Len; i++ )
nAccum = ( nAccum << 8 ) ^ TCRC_32[( nAccum >> 24 ) ^ *pData++];
return nAccum;
}
//-------------------------------------------------------------------
// CZCRC 类的构造方法和析构方法
CZCRC::CZCRC()
{
}
CZCRC::~CZCRC()
{
}
//-------------------------------------------------------------------
// CZCRC 类的公共方法
//-------------------------------------------------------------------
// CZCRC 类的保护方法
//-------------------------------------------------------------------
// CZCRC 类的私有方法
//-------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -