ARC16校驗

繼承NSObject的類,加號方法
{

uint8_t byteArray[[data length]];
[data getBytes:&byteArray length:[data length]];
Byte CRC16Lo, CRC16Hi;   //CRC寄存器
Byte CL, CH;             //多項式碼&HA001
Byte SaveLo, SaveHi;
int i, Flag;

CRC16Hi = 0xFF;
CRC16Lo = 0xFF;

CL = 0x1;
CH = 0xA0;
for (i = 0; i <[data length]; i++)
{
    Byte bytes = byteArray[i];
    CRC16Lo = (Byte)(CRC16Lo ^ bytes); //每一個數(shù)據(jù)與CRC寄存器進行異或
    
    for (Flag = 0; Flag <= 7; Flag++)
    {
        SaveHi = CRC16Hi;
        SaveLo = CRC16Lo;
        CRC16Hi = (Byte)(CRC16Hi / 2);             //高位右移一位
        CRC16Lo = (Byte)(CRC16Lo / 2);             //低位右移一位
        
        if ((SaveHi & 0x1) == 0x1)
        {
            CRC16Lo = (Byte)(CRC16Lo | 0x80);
        }
        
        if ((SaveLo & 0x1) == 0x1)
        {
            CRC16Hi = (Byte)(CRC16Hi ^ CH);
            CRC16Lo = (Byte)(CRC16Lo ^ CL);
        }
    }
}

return (uint)CRC16Hi * 256 + CRC16Lo;

}

調用校驗方法
{

            NSString *strResult = @"08";//十六進制字符串08,放Byte數(shù)組是0x08

            Byte data[]={0xAA,0x55,0x04,0x00,0x21,0x11,strtoul([strResult UTF8String],0,16)};

            NSData *personData = [[NSData alloc] initWithBytes:data length:sizeof(data)/sizeof(data[0])];

            NSString *mstr = [NSString stringWithFormat:@"%04X",[CRC16CheckFunction crc16:personData]];

            [orderString appendString:mstr];

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容