C#学习教程:计算互联网(即IP,即RFC791)校验和在C#中的共享互联网校验和的实现几乎可以在除.NET之外的所有语言中找到。有没有人可以分享一个实现?请记住,互联网协议规定:“校验和字段是标头中所有16位字的补码和的16位补码。为了计算校验和,校验和字段的值为零。“可从Math找到更多解释Dr.有一些效率指针可用,但这对我来说不是一个大问题。请包括您的测试!(编辑:关于测试其他人代码的有效评论-但我要离开协议并且没有我自己的测试向量,并且宁愿对其进行单元测试而不是将其投入生产以查看它是否与当前使用的相匹配!?编辑:这是我想出的一些单元测试。他们测试了一个扩展方法,该方法遍历整个字节集。如果您在测试中发现错误,请发表评论。[TestMethod()]publicvoidInternetChecksum_SimplestValidValue_ShouldMatch(){IEnumerablevalue=newbyte[1];//应该适用于任意长度的零数组ushortexpected=0xFFFF;ushortactual=value.InternetChecksum();Assert.AreEqual(预期,实际);}[TestMethod()]publicvoidInternetChecksum_ValidSingleByteExtreme_ShouldMatch(){IEnumerablevalue=newbyte[]{0xFF};预计ushort=0xFF;ushortactual=value.InternetChecksum();Assert.AreEqual(预期,实际);}[TestMethod()]publicvoidInternetChecksum_ValidMultiByteExtrema_ShouldMatch(){IEnumerablevalue=newbyte[]{0x00,0xFF};预计ushort=0xFF00;ushortactual=value.InternetChecksum();Assert.AreEqual(预期,实际);知道我把它藏在某个地方......http://cyb3rspy.wordpress.com/2008/03/27/ip-header-checksum-function-in-c/好吧,我从一个旧的代码库中挖出了一个实现,它passedthetestsIspecifiedinthequestion,所以这里是(作为扩展方法):以上就是C#学习教程:C#中计算互联网(即IP,即RFC791)校验和和份额,如果有用的话大家和你需要了解更多的C#学习教程,希望大家多多交流遵循—publicstaticushortInternetChecksum(thisIEnumerablevalue){byte[]buffer=value.ToArray();intlength=buffer.Length;诠释我=0;UInt32总和=0;UInt32数据=0;while(length>1){数据=0;data=(UInt32)(((UInt32)(buffer[i])0){sum=sum&0xFFFF;sum+=1;}i+=2;length-=2;}if(length>0){sum+=(UInt32)(buffer[i]0){sum=sum&0xFFFF;sum+=1;}}sum=~sum;sum=sum&0xFFFF;return(UInt16)sum;本文收集自网络且不代表立场,如涉及侵权,请点击右侧联系管理员删除,如需转载请注明出处:
