paddy
驱动牛犊
驱动牛犊
  • 注册日期2004-05-14
  • 最后登录2005-10-26
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1498回复:2

crc32问题

楼主#
更多 发布于:2005-03-04 09:22
 crc32问题

一个新手,在实现crc32算法时,遇到些问题,请高手帮忙看看!

我用如下代码实现crc32校验,查表法,256的表省略了

uchar crcbuff [] = { 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37};
uint crc; // CRC 码

ulong GenerateCRC32(uchar * DataBuf,ulong  len)
{
ulong oldcrc32;
ulong crc32;
ulong oldcrc;
uint charcnt,t;
    uchar c;

oldcrc32 = 0x00000000; file://初值为0
    charcnt=0;

while (len--)
    {
      t= (oldcrc32 >> 24) & 0xFF;     file://要移出的字节的值
   oldcrc=crc_32_tab[t];           file://根据移出的字节的值查表
      c=DataBuf[charcnt];             file://新移进来的字节值
      oldcrc32= (oldcrc32 << 8) | c;  file://将新移进来的字节值添在寄存器末字节中
      oldcrc32=oldcrc32^oldcrc;       file://将寄存器与查出的值进行xor运算
      charcnt++;
}
        crc32=oldcrc32;
        return crc32;
}

void main(void)
{
uchar *ptr;
crc = 0; // CRC 初值
ptr = crcbuff; // 指向第一个Byte 数据

uint length = sizeof(crcbuff);

crc = GenerateCRC32(ptr,length);

printf(\"0x%x \\n\",crc);
file://while(1);
}

可是算出来的结果与JAVA封装好的计算crc32的类所计算的结果不符,

那位帮忙看看是什么问题啊
zhaohh@gwtt.com 相识旧时缘,希望大家多帮忙!
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-04 13:37
俺一般是这样写的:

UINT ComputeCRC(BYTE *Buffer, int Length)
{
    UINT Result = 0xFFFFFFFF;

    for(int i = 0; i < Length; i++)
    {
        Result = (Result >> 8) ^ CRCTable[(Result & 0x000000FF) ^ Buffer [ i ] ] ;
    }

    return ~Result;
}

[编辑 -  3/4/05 by  cool-net]


[编辑 -  3/4/05 by  cool-net]
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
paddy
驱动牛犊
驱动牛犊
  • 注册日期2004-05-14
  • 最后登录2005-10-26
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-04 14:56
thanks,搞定了!
zhaohh@gwtt.com 相识旧时缘,希望大家多帮忙!
游客

返回顶部