#ifndef CRC16_H
#define CRC16_H
#ifdef __cplusplus
extern "C" {
#endif
#define CRC_CCITT /* 定义想要的CRC 类型 */
//#define CRC32 /* 定义想要的CRC 类型 */
#if defined(CRC_CCITT)
typedef unsigned short crc_16_32;
#define CRC_NAME "CRC-CCITT"
#define POLYNOMIAL 0x1021
#define INITIAL_REMAINDER 0xFFFF
#define FINAL_XOR_VALUE 0x0000
#define REFLECT_DATA FALSE
#define REFLECT_REMAINDER FALSE
#define CHECK_VALUE 0x29B1
#define BITWIDTH 16
#elif defined(CRC32)
typedef unsigned long crc_16_32;
#define CRC_NAME "CRC-32"
#define POLYNOMIAL 0x04C11DB7L
#define INITIAL_REMAINDER 0xFFFFFFFF
#define FINAL_XOR_VALUE 0xFFFFFFFF
#define REFLECT_DATA FALSE
#define REFLECT_REMAINDER FALSE
#define CHECK_VALUE 0xCBF43926
#define BITWIDTH 32
#else
#error "One of CRC_CCITT, CRC16, or CRC32 must be #define'd."
#endif
#define WIDTH (8 * sizeof(crc_16_32))
#define TOPBIT ((crc_16_32)1 << (WIDTH - 1))
#if (REFLECT_DATA == TRUE)
#undef REFLECT_DATA
#define REFLECT_DATA(X) ((crc_16_32)reflect((X), WIDTH))
#else
#undef REFLECT_DATA
#define REFLECT_DATA(X) (X)
#endif
#if (REFLECT_REMAINDER == TRUE)
#undef REFLECT_REMAINDER
#define REFLECT_REMAINDER(X) ((crc_16_32)reflect((X), WIDTH) )
#else
#undef REFLECT_REMAINDER
#define REFLECT_REMAINDER(X) (X)
#endif
crc_16_32 reflect(crc_16_32 data, unsigned char nBits);
crc_16_32 Crc_Call(crc_16_32 *addr,crc_16_32 length);
#ifdef __cplusplus
}
#endif /* extern "C" */
#endif
|