CRC16_CCITT_FALSE校验代码 及 验证

#include 

unsigned short CRC16_CCITT_FALSE(unsigned char* puchMsg, unsigned int usDataLen)
{
    unsigned short wCRCin = 0xFFFF;
    unsigned short wCPoly = 0x1021;
    unsigned char wChar = 0;

    while (usDataLen--) {
        wChar = *(puchMsg++);
        wCRCin ^= (wChar << 8);

        for (int i = 0; i < 8; i++) {
            if (wCRCin & 0x8000) {
                wCRCin = (wCRCin << 1) ^ wCPoly;
            }
            else {
                wCRCin = wCRCin << 1;
            }
        }
    }
    return (wCRCin);
}

//发送    0xAA , 0x06 , 0x10, 0x01
//接受    42991 (A7EF)
int main()
{
    unsigned char value[] = { 0xAA , 0x06 , 0x10, 0x01 };
    unsigned short result = CRC16_CCITT_FALSE(value, 4);

    std::cout << result;

    return 0;
}

你可能感兴趣的:(c++,算法)