本文主要是介绍用Golang编写的网际校验和算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
网际校验和算法适用于IP、TCP、UDP、ICMP等协议的校验。
func CheckSum(data []byte) uint16 {var (sum uint32length int = len(data)index int)//以每16位为单位进行求和,直到所有的字节全部求完或者只剩下一个8位字节(如果剩余一个8位字节说明字节数为奇数个)for length > 1 {sum += uint32(data[index])<<8 + uint32(data[index+1])index += 2length -= 2}//如果字节数为奇数个,要加上最后剩下的那个8位字节if length > 0 {sum += uint32(data[index])}//加上高16位进位的部分sum += (sum >> 16)//别忘了返回的时候先求反return uint16(^sum)
}
这篇关于用Golang编写的网际校验和算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!