CRC16 生成校验


-(unsigned short)crc16

{

    Byte *bytes = (Byte *)[self bytes];

    uint16_t length = (uint16_t)[self length];

    return (unsigned short)CTtDlgANSI_CRC_16(bytes,  length);

//     return (unsigned short)CCheckSumCCITT_CRC_16(bytes,  length);

}

//CCITT V.41,x16 + x12 + x5 + 1

unsigned short CCheckSumCCITT_CRC_16(Byte* btData,int nLength)

{

    if((btData==NULL)||(nLength<=0))

    {

        NSLog(@"无效数组!");

        return -1;

    }


    unsigned short CRC=0;

    Byte j;

    int i;

    

    for(i=0;i<nLength;i++)

    {

        CRC^=(btData[i]<<8);

        for (j=0;j<8;j++)

        {

            if(CRC&0x8000)CRC=((CRC<<1)^0x1021);

            else          CRC<<=1;

        }

    }

    return ((CRC>>8)+(CRC<<8));/* 应用时低在先 */

}

unsigned short CTtDlgANSI_CRC_16(Byte * btData,int nLength) //ANSI CRC-16,x16 + x15 + x2 + 1

{

    if((btData==NULL)||(nLength<=0))

    {

        NSLog(@"无效数组!");

        return -1;

    }

    unsigned short CRC=0xFFFF;

    Byte j,Tmp=0;

    int i;

    for(i=0;i<nLength;i++)

    {

        CRC^=btData[i];

        for (j=0;j<8;j++)

        {

            Tmp=CRC&0x0001;

            CRC=CRC>>1;

            if(Tmp)CRC=(CRC^0xA001);

        }

    }

    return ((CRC>>8)+(CRC<<8)); /* 应用时高在先 */

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值