OC CRC 校验

来源:互联网 发布:linux服务器架构 编辑:程序博客网 时间:2024/06/05 15:41

原文:http://blog.csdn.net/zwl492454828/article/details/51211712

直接上代码

static const unsigned short crc16table[] =

{

    0x00000x11890x23120x329B0x46240x57AD0x65360x74BF,

    

    0x8C480x9DC10xAF5A0xBED30xCA6C0xDBE50xE97E0xF8F7,

    

    0x10810x01080x33930x221A0x56A50x472C0x75B70x643E,

    

    0x9CC90x8D400xBFDB0xAE520xDAED0xCB640xF9FF0xE876,

    

    0x21020x308B0x02100x13990x67260x76AF0x44340x55BD,

    

    0xAD4A0xBCC30x8E580x9FD10xEB6E0xFAE70xC87C0xD9F5,

    

    0x31830x200A0x12910x03180x77A70x662E0x54B50x453C,

    

    0xBDCB0xAC420x9ED90x8F500xFBEF0xEA660xD8FD0xC974,

    

    0x42040x538D0x61160x709F0x04200x15A90x27320x36BB,

    

    0xCE4C0xDFC50xED5E0xFCD70x88680x99E10xAB7A0xBAF3,

    

    0x52850x430C0x71970x601E0x14A10x05280x37B30x263A,

    

    0xDECD0xCF440xFDDF0xEC560x98E90x89600xBBFB0xAA72,

    

    0x63060x728F0x40140x519D0x25220x34AB0x06300x17B9,

    

    0xEF4E0xFEC70xCC5C0xDDD50xA96A0xB8E30x8A780x9BF1,

    

    0x73870x620E0x50950x411C0x35A30x242A0x16B10x0738,

    

    0xFFCF0xEE460xDCDD0xCD540xB9EB0xA8620x9AF90x8B70,

    

    0x84080x95810xA71A0xB6930xC22C0xD3A50xE13E0xF0B7,

    

    0x08400x19C90x2B520x3ADB0x4E640x5FED0x6D760x7CFF,

    

    0x94890x85000xB79B0xA6120xD2AD0xC3240xF1BF0xE036,

    

    0x18C10x09480x3BD30x2A5A0x5EE50x4F6C0x7DF70x6C7E,

    

    0xA50A0xB4830x86180x97910xE32E0xF2A70xC03C0xD1B5,

    

    0x29420x38CB0x0A500x1BD90x6F660x7EEF0x4C740x5DFD,

    

    0xB58B0xA4020x96990x87100xF3AF0xE2260xD0BD0xC134,

    

    0x39C30x284A0x1AD10x0B580x7FE70x6E6E0x5CF50x4D7C,

    

    0xC60C0xD7850xE51E0xF4970x80280x91A10xA33A0xB2B3,

    

    0x4A440x5BCD0x69560x78DF0x0C600x1DE90x2F720x3EFB,

    

    0xD68D0xC7040xF59F0xE4160x90A90x81200xB3BB0xA232,

    

    0x5AC50x4B4C0x79D70x685E0x1CE10x0D680x3FF30x2E7A,

    

    0xE70E0xF6870xC41C0xD5950xA12A0xB0A30x82380x93B1,

    

    0x6B460x7ACF0x48540x59DD0x2D620x3CEB0x0E700x1FF9,

    

    0xF78F0xE6060xD49D0xC5140xB1AB0xA0220x92B90x8330,

    

    0x7BC70x6A4E0x58D50x495C0x3DE30x2C6A0x1EF10x0F78

};

方法:


- (unsigned short)crc16: (NSData*) data

{

    unsigned int    crc;

    

    crc = 0xFFFF;

    

    uint8_t byteArray[[data length]];

    [data getBytes:&byteArray];

    

    for (int i = 0; i<[data length]; i++) {

        Byte byte = byteArray[i];

        crc = (crc >> 8) ^ crc16table[(crc^ byte) & 0xFF];

    }

    return crc;

}

调用:

 Byte data[]={0xA6,0x27,0x50,0x01,0x7BC70x6A4E0x58D50x495C0x3DE30x2C6A,0x1EF1,0x0F78,0x01,0x02,0x03,0x04,0x05,0x06,0x08,0x09,0x08,0x07,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};

    

    NSData *personData = [[NSData allocinitWithBytes:datalength:sizeof(data)/sizeof(data[0])];


    [self crc16:personData];





0 0