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条回答 默认 最新

  • 关注

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

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号