这个代码怎么去理解呢

 unsigned int Checksum(void* buf, int iBufLen, CHECKSUM iType)
{
    unsigned char* newbuf8;
    unsigned short* newbuf16;
    unsigned int sum = 0;
    unsigned int checksum = 0;

    switch (iType)
    {
    case CHK_16BIT:
    {
        newbuf16 = (unsigned short*)buf;
        for (int i = 0; i < iBufLen; i++)
        {
            sum = sum + *newbuf16;
            newbuf16++;
        }
        checksum = sum % (0xFFFF + 0x0001);
        return checksum;
        break;
    }
    case CHK_8BIT:
    {
        newbuf8 = (unsigned char*)buf;
        for (int i = 0; i < iBufLen; i++)
        {
            sum = sum + *newbuf8;
            newbuf8++;
        }
        checksum = sum % (0xFF + 0x01);
        return checksum;
        break;
    }
    default:
    {
        break;
    }
    };


}
这个是他的输出

img

判断一个数是8bit还是16bit?
函数中主要还是需要理解swich每个分支的处理过程,实际上呢两个处理大同小异,都是遍历求和(指针直接++可以表示数组后移),然后根据bit数取余返回。
8bit数据最大为0xff,加1取余即可获取相应8bit数据
16bit数据类似

这是一个C语言实现的校验和函数,它计算缓冲区的校验和。该函数接受三个参数:

指向缓冲区的指针(buf),
缓冲区的长度(iBufLen),
校验和类型(iType)。
校验和类型可以是CHK_16BIT或CHK_8BIT。代码然后使用switch语句根据类型执行适当的校验和计算。如果校验和类型不是CHK_16BIT或CHK_8BIT,则不执行任何操作

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^