蓝牙数据传输 生成CRC16 checksum校验码的函数

-(uint16_t)hx_CRC16:(Byte *)sendBuf length:(uint16_t)len{
    uint wCRCTalbeAbs[] = {
    0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, 0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400,
    };
    uint16_t wCRC =0xFFFF;
    uint8_t chChar;
    for (uint16_t i = 0; i < len; i++) {
        chChar = sendBuf[i];
        wCRC = wCRCTalbeAbs[(chChar ^ wCRC) &15] ^ (wCRC >> 4);
        wCRC = wCRCTalbeAbs[((chChar >> 4) ^ wCRC) & 15] ^ (wCRC >> 4);
    }
    NSLog(@"wCRC:%hu",wCRC);
    int right,left;
    right = wCRC & 0x00ff; // 取低8位 221 0xDD
    left = (wCRC >> 8) & 0x00ff; //取高8位 223 0xDF
    return wCRC;
}

猜你喜欢

转载自blog.csdn.net/zhoudaxiaq/article/details/106216094