文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>一不小心的unsigned

一不小心的unsigned

时间:2010-12-30  来源:烧炳

unsigned CheckSum(FILE* fp)
{
        unsigned long sum = 0;
        unsigned i = 0;
        unsigned char chStr;
    while ((chStr = fgetc(fp)) != EOF)
    {
        if(i&1)
            sum += (unsigned long)chStr;
        else
            sum += (unsigned long)chStr<<8;
        if(sum >> 16)   
        {
            sum++;
            sum &= 0xffff;
        }
                i++;
    }
    return sum;
}

但执行这个函数的时候,while循环无法退出,检查代码发现问题出在下面这一句:

unsigned char chStr;

忘记了把chStr定义为了unsigned,fopen返回EOF(-1)时,chStr成了255,这样的话就死循环了

原因已经找到,改就不难拉,修改后代码:

unsigned CheckSum(FILE* fp)
{
        unsigned long sum = 0;
        unsigned i = 0;
        char chStr;
    while ((chStr = fgetc(fp)) != EOF)
    {
        if(i&1)
            sum += (unsigned long)chStr;
        else
            sum += (unsigned long)chStr<<8;
        if(sum >> 16)   
        {
            sum++;
            sum &= 0xffff;
        }
                i++;
    }
    return sum;
}

这样一来,不仅解决了问题,而已我觉得,char类型比unsigned char类型更为合理,因为文件的内容也可能是二进制的,那如果用unsigned char时文件内容出现了非负值还是一样会出错的。

相关阅读 更多 +
排行榜 更多 +
火柴人战争血腥打击

火柴人战争血腥打击

飞行射击 下载
沉浸式射击比赛

沉浸式射击比赛

飞行射击 下载
三角符文第一章下载

三角符文第一章下载

角色扮演 下载