Object-c 纯手写方法CRC8,16,32,跟我用笔计算的一样,不过跟那些代码算法结果32位的不同

原创 2015年07月08日 12:00:36

    CRC8正确方法

    again只能为2个字,不然的话得自己更改23n-8的位移数目

    

    int again  = 0x3842;

    again = again <<8;

    NSLog(@"%x",again);

    for (int n = 23; n>0; n--) {

        if (again >>n & 1) {

            NSLog(@"n= %d",n);

            again ^= (0x131<<(n-8));

            NSLog(@"%x",again);

        }else{

            again = again;

        

        }

        if (again <0x0100) {

            NSLog(@"xiao--%d",n);

            NSLog(@"again=%x",again);

            return 0;

        }

    }



    CRC16正确方法

    again只能为4个字,不然的话得自己更改47n-16的位移数目

    unsigned long ploy =0x11021;

    unsigned long again  = 0x11223344;

    again = again <<16;

    NSLog(@"%lx",again);

    for (int n = 47; n>0; n--) {

        if (again >>n & 1) {

            NSLog(@"n= %d",n);

            again ^= (ploy<<(n-16));

            NSLog(@"%lx",again);

        }else{

            again = again;

            

        }

        if (again <0x010000) {

            NSLog(@"xiao--%d",n);

            NSLog(@"again=%lx",again);

            return 0;

        }

    }


CRC正确方法二,采用分步位移的方法,避免一次性全部位移而超出64.

    unsigned long ploy =0x11021;

    unsigned long again  = 0x01020304;

    

    

    for (int j =0; j<5; j++) {

        NSLog(@"j%d",j);

        if (j!=0) {

            again = again << 4;

        }

        

        NSLog(@"%lx",again);

        

        for (int n = 31; n>0; n--) {


            if (again >>n & 1) {

                NSLog(@"n2= %d",n);

                again ^= (ploy<<(n-16));

                NSLog(@"%lx",again);

            }else{

                again = again;

                

            }

            if (again <0x010000) {

                NSLog(@"xiao--%d",n);

                NSLog(@"again=%lx",again);

                break;

            }

        }

    }


    return 0;


      crc32的方法

    unsigned long ploy =0x104c11db7;

    unsigned long again  = 0x40ff048001000000;

    

    for (int j =0; j<9; j++) {

        NSLog(@"j%d",j);

        if (j!=0) {

            again = again << 4;

        }

        

        NSLog(@"%lx",again);

        

        for (int n = 63; n>0; n--) {

            

            if (again >>n & 1) {

                NSLog(@"n2= %d",n);

                again ^= (ploy<<(n-32));

                NSLog(@"%lx",again);

            }else{

                again = again;

                

            }

            if (again <0x0100000000) {

                NSLog(@"xiao--%d",n);

                NSLog(@"again=%lx",again);

                break;

            }

        }

    }

    

    return 0;



crc 校验码的计算方法 (转载)

摘要:CRC(Cyclic Redundancy Check)被广泛用于数据通信过程中的差错检测,具有很强的 检错能力。本文详细介绍了CRC的基本原理,并且按照解释通行的查表算法的由来的思路介绍...
  • u011721508
  • u011721508
  • 2017年04月25日 21:31
  • 1067

查表法计算CRC校验码(代码)

如果您不想将一大堆码表复制到您的代码中,可以使用动态生成码表(不过是给256个数字进行CRC计算而已)。下面是生成CRC-32码表的代码(C/C++语言):/*********************...
  • leibniz_zsu
  • leibniz_zsu
  • 2007年05月17日 17:40
  • 6341

CRC32查表法算法实现

CRC参数模型:   Name : "CRC-32"   Width : 32   Poly : 04C11DB7   Init : FFFFFFFF   RefIn : True   R...
  • nh5431313
  • nh5431313
  • 2017年05月16日 15:03
  • 807

32位CRC校验代码及其应用

转载时请注明出处和作者联系方式:http://blog.csdn.net/mimepp作者联系方式:YU TAO 近来看了一下有关CRC校验的内容,这里做个笔记.CRC有关的RFC,可以参考http:...
  • mimepp
  • mimepp
  • 2007年08月20日 14:24
  • 3566

几种CRC计算源码

void InvertUint8(unsigned char *dBuf,unsigned char *srcBuf) { int i; unsigned char tmp[4]; tmp[0...
  • A_Little_allan
  • A_Little_allan
  • 2017年10月06日 15:32
  • 380

STM32自带的CRC32软件计算

uint32 Crc32Table[256]= { 0x00000000,0x04C11DB7,0x09823B6E,0x0D4326D9,0x130476DC,0x17C56B6B,0x1A86...
  • y391770118
  • y391770118
  • 2014年10月01日 14:13
  • 821

CRC32 和 zip文件的crc 字段

python中的计算注意,python 的计算结果是有符号的,如果要转为unsigned 可以和0xffffffff与操作>>> import zlib >>> import binascii s =...
  • harryhare
  • harryhare
  • 2017年02月15日 01:54
  • 845

安卓CRC32校验

话不多说,直接上代码 /** * Created by SiKang on 2017/5/17. */ public class CustomData { public static vo...
  • sky2016_w
  • sky2016_w
  • 2017年05月17日 10:57
  • 729

CRC32校验算法C语言版(查表法)

最近用到CRC校验算法,就找了些资料,学习了一下,网上关于CRC32的资料也多,但感觉不是很完整,或者太高深。 CRC算法查表法很常见,但表是怎么来的,有些资料说得不很清楚。 我来说一下我的看法: 1...
  • qq446252221
  • qq446252221
  • 2016年05月16日 17:20
  • 6168

JAVA计算文件的crc32校验码

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja...
  • yuyue618
  • yuyue618
  • 2013年03月26日 17:34
  • 11128
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Object-c 纯手写方法CRC8,16,32,跟我用笔计算的一样,不过跟那些代码算法结果32位的不同
举报原因:
原因补充:

(最多只允许输入30个字)