本帖最后由 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;
} |