打印

关于CRC循环冗余校验的问题

[复制链接]
1914|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sgh3352952|  楼主 | 2013-4-11 21:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sgh3352952 于 2013-4-11 22:03 编辑

用CRC做校验,得不到预期的结果。不知道问题出在哪里,代码如下,求解答~
#include "stdafx.h"
#include <iostream>
#include<iomanip>
#include<fstream>
/*  
*  函数名:GetCrc32  
*  函数原型:unsigned int GetCrc32(char* InStr,unsigned int len)  
*      参数:InStr  ---指向需要计算CRC32值的字符串  
*          len  ---为InStr的长度  
*      返回值为计算出来的CRC32结果。  

*  
*/  
  
unsigned int GetCrc32( unsigned char* InStr,unsigned int len){      
  //生成Crc32的查询表   
  unsigned int Crc32Table[256];   
  int i,j;      
  unsigned int Crc;      
  for (i = 0; i < 256; i++){      
    Crc = i;      
    for (j = 0; j < 8; j++){      
      if (Crc & 1)      
        Crc = (Crc >> 1) ^ 0xEDB88320;      
      else     
        Crc >>= 1;   
    }      
    Crc32Table = Crc;      
  }      
  
  //开始计算CRC32校验值   
  Crc=0xffffffff;      
  for(int i=0; i<len; i++){        
    Crc = (Crc >> 8) ^ Crc32Table[(Crc & 0xFF) ^ InStr];      
  }   
     
  Crc ^= 0xFFFFFFFF;   
   printf("%d\n",sizeof(Crc));
  return Crc;      
}      
  

#include<iostream>     
using namespace std;   
  
int main()
{

unsigned int crc;
unsigned int mm;
unsigned char c[9]="abcde";/////////
crc=GetCrc32(c,5);////计算冗余码
c[8]=crc;
c[7]=crc>>8;
c[6]=crc>>16;
c[5]=crc>>24;//把计算出的冗余码拼接到字符串后面。
mm=GetCrc32(c,9);/////如果不出错,这儿应该得到0,但是始终得不到0????
printf("%0x\n",mm);
system("pause");
return 0;
}

相关帖子

沙发
sgh3352952|  楼主 | 2013-4-12 09:11 | 只看该作者
别沉了

使用特权

评论回复
板凳
sgh3352952|  楼主 | 2013-4-12 13:54 | 只看该作者

使用特权

评论回复
地板
bhj2020| | 2013-4-12 14:03 | 只看该作者
Crc32Table = Crc;     ???????????

使用特权

评论回复
5
huangxz| | 2013-4-12 14:10 | 只看该作者
CRC32不是这样子用的哦

使用特权

评论回复
6
qiujiahongde| | 2013-4-12 17:36 | 只看该作者
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

1

粉丝