求checksum 值 计算方法

liuchunshanyj 2010-12-15 11:19:30
做的一个 bios烧录程序。

老板要求 加入一个计算 Bin档 checksum 值的功能。 不知道chenksum是什么东西

求高手解答

求checksum值 算法 求法~~~
...全文
1227 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xengine-qyt 2010-12-15
  • 打赏
  • 举报
回复

USHORT CICMP::CheckSum(USHORT *buff,int Size)
{
unsigned long cksum = 0;
//将数据以字为单位累加到cksum中
while (Size > 1)
{
cksum += *buff;
Size -= sizeof(USHORT);
}
//如果为奇数,将最后一个字节扩展到双字,在累加到cksum中
if (Size)
{
cksum += *(UCHAR*)buff;
}
//将cksum的高16位和低16位相加,取反后得到效验和
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >> 16);
return (USHORT)(~cksum);//位运算符号:位取反!比如有int a=3;则先把十进制数3,转化为二进制数,即00000011.那么~a=11111100
}


使用自定义IP包的时候后需要计算,最好先了解下 协议。
bluejays 2010-12-15
  • 打赏
  • 举报
回复 1
校验和,LZ自己google一下就知道了。
他就是判断传输文件过程有没有出错,这里就是看烧录有没有错误了。
算法很多,只要两边算法一样就行了。
最简单的:
烧录之前,把所有的字节依次相加,结果的高位全都不要,只保留最低一个字节,这就是校验和,并且把这个字节烧录到文件末尾或者某个特定地方。
烧录之后,把烧录的结果也按照同样的算法相加,得到一个字节,然后和烧录的一个字节校验和比较,如果不相等就说明出错了
lei001 2010-12-15
  • 打赏
  • 举报
回复
Checksum-检验和,校验和。在数据处理和数据通信领域中,用于校验目的的一组数据项的和。这些数据项可以是数字或在计算检验和过程中看作数字的其它字符串。   它通常是以十六进制为数制表示的形式,如:   十六进制串: 0102030405060708   的效验和是: 24 (十六进制)   如果效验和的数值超过十六进制的FF,也就是255. 就要求其补码作为效验和.   通常用来在通信中,尤其是远距离通信中保证数据的完整性和准确性.

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧