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;



相关文章推荐

《Effective Object-C 2.0 编写高质量IOS与OS X代码的52个有效方法》笔记

《Effective Object-C 2.0 编写高质量IOS与OS X代码的52个有效方法》1 、在类的头文件中尽量少引入其他头文件 使用@class代替import,还可以解决相互引用的问题。 ...

我学习CRC32、CRC16、CRC原理和算法的总结(与WINRAR结果一致)

原文地址:http://wenku.baidu.com/view/fb791c0203d8ce2f006623f5.html 我学习CRC32、CRC16、CRC原理和算法的总结(与WINR...

Object-C iOS纯代码布局 一堆代码可以放这里!

最近写的文章都是创业类,好吧,今天好好写写技术类的文章!毕竟这几天在速成IOS,看的是object-c,由于速成的很快,好累!好在现在基本已经入了点门道了,这才看的懂新人的代码,才能提前感受代码危机。...
  • cyq1162
  • cyq1162
  • 2017年05月12日 17:48
  • 550

黑马程序员------object-c简史及对比基本语法与其他语言的不同

知识要点:obj-c面向对象的特性 object-c从语言说来跟ios开发
  • hky926
  • hky926
  • 2014年10月04日 19:56
  • 322

object-c写的命令行计算器

  • 2017年04月25日 14:05
  • 18KB
  • 下载

OC学习笔记(8)Object-C组合使用

1、ASPoint类 //.h #import @interface ASPoint : NSObject @property(nonatomic,assign) double x; @prop...

Object-C 声明属性为什么用下划线,代码规范和编程风格

Object-C 声明属性为什么用下划线,代码规范和编程风格   在阅读和书写关于iPhone编程的代码的时候,发现有很多这样的情况: 看到很多源代码里面,使用前面带下划线变量,然后在@sy...

Object-c 一些代码规范

点引用是地道的Objective-C 2.0的风格。它被使用于简单的属性set、get操作,但对象的其它行为不应该使用它。 Setters中对NSString进行copy永远不要仅仅re...
  • joywxz
  • joywxz
  • 2011年10月13日 10:32
  • 392
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Object-c 纯手写方法CRC8,16,32,跟我用笔计算的一样,不过跟那些代码算法结果32位的不同
举报原因:
原因补充:

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