+ -
当前位置:首页 → 问答吧 → 请大侠们帮我分析一下这段代码是怎么回事,先谢谢了!

请大侠们帮我分析一下这段代码是怎么回事,先谢谢了!

时间:2010-08-07

来源:互联网

各位大侠,我不懂C语言,请帮我看一下,我有一段数据,用下边的sysCRC算法计算后,得到的值是多少?

数据:

11 10 0B 50 00 00 00 00 00 00 00 00 00 00 00 00
D4 00 03 01 08 00 2B C3 A2 9B 00 41 00 44 45 35
30 30 2D 42 41 22 81 00 00 00 00 00 00 00 00 00
00 AC AC 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 08 04 86 02 00 AF 08 05 00 86 02 04 AF 08
05 00 88 04 03 AF 08 05 00 61 80 88 04 05 AF 08
05 00 61 80 00 00 00 00 00 00 00 00 00 00 00 00
后边全是0的部分我省略掉了!


算法函数代码:

static int sysCRC(u_char *sysData)
{
        register u_int const POLY = 0x04c11db6;
        register u_int FlippedCrc = 0, Crc = 0xffffffff;
        register u_char i, CurrentByte, Bit, Msb;
            register u_char chksm_1, chksm_2;

        for (i=0; i<126; i++) {
                CurrentByte = SData[i];

                for (Bit=0; Bit<8; Bit++) {
                        Msb = (Crc >> 31) & 1;
                        Crc <<= 1;

                        if (Msb ^ (CurrentByte & 1)) {
                                Crc ^= POLY;
                                Crc |= 1;
                        }
                        CurrentByte >>= 1;
                }
        }

        for (i=0; i<32; i++) {
                FlippedCrc <<= 1;
                Bit = Crc & 1;
                Crc >>= 1;
                FlippedCrc += Bit;
        }
        Crc = FlippedCrc ^ 0xffffffff;

        chksm_1 = Crc & 0xff;
        chksm_2 = Crc >> 8;

        return (Sdata[126] == chksm_1) && (SData[127] == chksm_2);
}

作者: swallowcn   发布时间: 2010-08-07

帮我看看吧!

作者: swallowcn   发布时间: 2010-08-07

传入参数是sysData没有使用,又莫名其妙调用了个SData,你确定这段代码正确?

作者: daybreakcx   发布时间: 2010-08-07

还有个问题,最后的返回值一个是Sdata,另一个是SData。如果连同sysData都是一样的东西,那么返回值是0…………

作者: daybreakcx   发布时间: 2010-08-07