Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 如何正确的计算文件收发进度
【标  题】:如何正确的计算文件收发进度
【关键字】:
【来  源】:BLOG.CSDN.NET

如何正确的计算文件收发进度

Your Ad Here

学习Winsock编程,用TCP协议收发文件是必不可少的一个实践环节,而计算收发百分比的一行代码,很多人都写不对。

假设我们用DWORD(unsigned long)来表示文件长度,则长度的最大值是232-1,也就是4GB。虽然Win32 API能够返回两个DWORD表示长度,但是为了简便,我们还是原意接收4GB的人为限制。以下我们的讨论基于这个前提。

通常我们会使用一个DWORD表示length,一个DWORD表示pos。为了避免使用浮点数,很多人会这样写

DWORD percent = pos * 100 / length;

之所以把100乘在前面,是因为这个除法是整数除法,不这样的话,percent将永远是0。这样以来,pos*100便有了一个限制,它不能溢出,也就是不能大于232-1。这样,如果我们传送大于4GB/100=40MB的文件,这个percent就会计算错误。

显然不能先做乘法,但还要不使用浮点运算,怎么写才对呢?

DWORD percent = 0;

if (pos > 0) percent = 100 / (length / pos);

如果你看那个if不爽,可以想办法确保调用的时刻pos>0,就可以不要if了。

CryptoFBC v0.1 beta Released:【上一篇】
关于堆栈与队列使用的小思考(1):【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • Memory Layout And The Stack
  • SuSE Linux 系统启动概念相关文档
  • 免费午餐:Google图像浏览器Picasa
  • 减少ORACLE中的磁盘I/O
  • 非正常IP报文的产生与处理
  • Enlib v3.5 for delphi2005
  • Servlets和JSP开发原则(转)
  • JSP应用程序开发中安全问题的实例解析
  • ASP + mssql 与 查询分析器 之 使用存储过程 建,添,更,选,删 基本数据操作 By shawl.qiu
  • Struts 的动态复选框
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.