CRC32的计算程序,为啥结果不对啊?

[复制链接]
2000|8
手机看帖
扫描二维码
随时随地手机跟帖
limee|  楼主 | 2019-7-14 00:21 | 显示全部楼层 |阅读模式
static unsigned int crc32( const unsigned char *buf, unsigned int size);
{
  ...... // 这里就省略了
}

定义如下


   int main(int argc, char *argv[])
{
   FILE * fp;
   unsigned int res;
   unsigned char buf[MAXLEN];
   fp = fopen("tu.mp3", "r" );
   if( crc32 == NULL )
   {
       printf("File is not exist.\n");
       exit(1);
   }
    int rc;   // 这里每次读入1024字节,最后一个是余数,采用分段计算的方法,为啥结果不对啊?
//  fseek(infile,0x4b,SEEK_SET);
    while( (rc = fread(buf,sizeof(unsigned char), MAXLEN,fp)) != 0 )
    {
       res = crc32(buf,rc);
    }   
     printf("%16X",res);
     fclose(fp);
     return 0;
}


使用特权

评论回复

相关帖子

tianxj01| | 2019-7-14 08:10 | 显示全部楼层
没仔细看你程序,因为你估计还没弄明白,CRC,其实是有很多格式,比如多项式、比如初值、比如输出结果翻转与否。你测试CRC,不需要多,几个数据就可以了,网上很多CRC计算工具,像GCRC就非常方便来验证你写想程序对不对,下载一个,看看人家CRC运算需要几个可变参数,再认真去看看CRC相关方面的东西,然后根据自己确定的格式,用工具软件来验证就可以了。

使用特权

评论回复
limee|  楼主 | 2019-7-14 09:19 | 显示全部楼层
tianxj01 发表于 2019-7-14 08:10
没仔细看你程序,因为你估计还没弄明白,CRC,其实是有很多格式,比如多项式、比如初值、比如输出结果翻转 ...

网上的代码都是一整段的缓冲区进行计算的。我想知道如何分段进行计算。
比如我要计算的文件是1tb的大小,用网上的方法是行不通的。

使用特权

评论回复
tianxj01| | 2019-7-14 09:40 | 显示全部楼层
本帖最后由 tianxj01 于 2019-7-14 09:45 编辑
limee 发表于 2019-7-14 09:19
网上的代码都是一整段的缓冲区进行计算的。我想知道如何分段进行计算。
比如我要计算的文件是1tb的大小, ...


CRC分段非常简单,对初始值为FFFFFF 异或值为000000模式而言,就是上一段结果,是这一段的初值,这样连续下去,就可以实现无限段CRC计算从而完成整个文件的CRC校验。其中CRC8则初值=8位  CRC16初值为16位 CRC32 初值为32位。
你可以用GCRC验证一下就清清楚楚了。
常用的CRC32 常见格式反倒是最少了,其中
CRC-32 多项式:04C11DB7 初始值FFFFFF异或值FFFFFF LSB翻转
CRC-32/MPEG2 多项式04C11DB7 初始值FFFFFF异或值000000 MSB翻转

使用特权

评论回复
limee|  楼主 | 2019-7-14 10:18 | 显示全部楼层
tianxj01 发表于 2019-7-14 09:40
CRC分段非常简单,对初始值为FFFFFF 异或值为000000模式而言,就是上一段结果,是这一段的初值,这样连续 ...

https://download.csdn.net/download/qq721236042/10694158

能否帮忙下个工具,谢谢。

使用特权

评论回复
tianxj01| | 2019-7-14 10:30 | 显示全部楼层
limee 发表于 2019-7-14 10:18
https://download.csdn.net/download/qq721236042/10694158

能否帮忙下个工具,谢谢。

http://www.geshe.com/zh-cn/support/download
自己去下吧,免费的

使用特权

评论回复
limee|  楼主 | 2019-7-14 22:30 | 显示全部楼层
tianxj01 发表于 2019-7-14 10:30
http://www.geshe.com/zh-cn/support/download
自己去下吧,免费的

CRC-32 多项式:04C11DB7 初始值FFFFFF异或值FFFFFF LSB翻转

我需要这个计算的代码,网上分段计算的结果都对不上。

使用特权

评论回复
dirtwillfly| | 2019-7-14 22:47 | 显示全部楼层
菜农大叔的crc计算器
http://www.hotpage.com.cn/hotcrc/

使用特权

评论回复
limee|  楼主 | 2019-7-15 11:54 | 显示全部楼层
limee 发表于 2019-7-14 22:30
CRC-32 多项式:04C11DB7 初始值FFFFFF异或值FFFFFF LSB翻转

我需要这个计算的代码,网上分段计算的结果 ...

谢谢你的帮助,问题已经解决了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

301

主题

475

帖子

0

粉丝