zoukankan      html  css  js  c++  java
  • C# 从数据包获取校验和

    因为数据包是一个字节数组,也是报文,而校验和是其中之一,校验和是在数据处理和数据通信领域中,用于校验目的的一组数据项的和,所以算法和很重要:

    数据包格式:

    **版本号 (2byte)

    **Ip地址(4byte)

    .......

    **校验和 (2byte)

    ...

    方法如下:

    /// <summary>
    /// 方法:16位无字符整数转字节数组
    /// </summary>
    /// <param name="i">代入的16为参数</param>
    /// <returns></returns>
    public static byte[] makeInt16Data(UInt16 m)
    {
    byte[] bys = BitConverter.GetBytes(m);
    Array.Reverse(bys);
    return bys;
    }

    /// <summary>
    /// 方法:获取校验
    /// </summary>
    /// <param name="data">数据包</param>
    /// <param name="len">数据包长度</param>
    /// <returns></returns>
    public static ushort checksum(byte[] data, int len)
    {
    int sum = 0;
    for (int i = 0; i < len; i = i + 2)
    {
    if (i == 10)
    continue;
    sum += BitConverter.ToUInt16(makeInt16Data(BitConverter.ToUInt16(data, i)), 0);
    }
    if (sum > 0xffff)
    {
    int a = sum >> 16;
    sum = (ushort)sum;
    sum = sum + a;
    }
    return (ushort)(~sum);
    }

    用其方法代入要获取的数据包与数据包的长度即可获取到。


  • 相关阅读:
    中国的人生路上是紧跟领导就会有回报
    重游三峡广场有感
    假如你没有我
    关于中小型软件企业技术管理的建议(转)
    街客
    游歌乐山有感
    高成就者的反常思维
    漫谈创业和管理-程序员5大思维障碍 (转)
    QQ情缘
    javascript library
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2361837.html
Copyright © 2011-2022 走看看