disaste0_0 2023-01-30 22:56 采纳率: 81.6%
浏览 20
已结题

这个代码怎么去理解呢

 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

  • 写回答

3条回答 默认 最新

  • 黑心萝卜三条杠 2023-01-31 00:30
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月8日
  • 已采纳回答 1月31日
  • 修改了问题 1月30日
  • 修改了问题 1月30日
  • 展开全部