游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1641|回复: 4

求助~~CRC算法的困惑

[复制链接]

1

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2006-8-11 18:26:00 | 显示全部楼层 |阅读模式
由于工作需要(^_^,java开发)最近在看PNG的文件格式,看到CRC算法,感觉比较有用,就找了找相关资料学习学习。

CRC码是一串2进制序列取余的结果,除数(或者叫多项式)不同,叫法不同,什么CRC-16,CRC-CCITT,CRC-32等等。

求CRC的大体意思是使用现有的CRC<<1,再加上本位的值(0或1),求出余数,就是当前的CRC。

( 以上是我的理解,不知道对不对,)

可是看到代码,却被 与或 糊涂了。

unsigned int cal_crc(unsigned char *ptr, unsigned char len) {
        unsigned char i;
        unsigned int crc=0;
        while(len--!=0) {
                for(i=0x80; i!=0; i/=2) {
                        if((crc&0x8000)!=0) {crc*=2; crc^=0x1021;} /* 余式CRC 乘以2 再求CRC */
                        else crc*=2;
                        if((*ptr&i)!=0) crc^=0x1021; /* 再加上本位的CRC */
                }
                ptr++;
        }
        return(crc);
}

总结下代码的意思是,CRC(16位)的最高位和当前的数据位异或,为1的话,CRC左移1位后,会异或0x1021,否则0的话,只是移位。

与或不过是0x1021中1对应的位取反,0对应的位保留,为何和取余数产生关系,不解啊~~~困惑~~~~

哪位知道的,给些意见,点拨小弟一下,这里先谢过了~~~呵呵

1

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2006-8-12 20:48:00 | 显示全部楼层

Re:求助~~CRC算法的困惑

没人啊~~~~~~
自己顶。。。。。。。。。。。。。。。。。。。。。。。。

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2006-8-13 13:43:00 | 显示全部楼层

Re:求助~~CRC算法的困惑

计算CRC的算法网上应该有的吧……
不过手头没有CRC32的资料……

1

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2006-8-13 17:31:00 | 显示全部楼层

Re:求助~~CRC算法的困惑

算法是有的,可是没看得懂算法怎么实现原理的

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-8-13 19:56:00 | 显示全部楼层

Re:求助~~CRC算法的困惑

为什么没看懂呢?CRC算法就是多项式求和,很多书里有讲到。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 03:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表