如何使用数据结构中所有字节的8位加法来计算校验和

时间:2011-01-10 15:01:21

标签: c#

我需要从字节数组计算校验和。它的一些串口包。我有这样的文字:

校验和是使用数据结构中所有字节的8位加法计算的。不考虑溢出(1字节)。

如何添加8位?

在C#中需要它。

3 个答案:

答案 0 :(得分:17)

直接添加?好吧,你可以很容易地遍历所有字节:

public static byte ComputeAdditionChecksum(byte[] data)
{
    byte sum = 0;
    unchecked // Let overflow occur without exceptions
    {
        foreach (byte b in data)
        {
            sum += b;
        }
    }
    return sum;
}

或者,使用LINQ:

public static byte ComputeAdditionChecksum(byte[] data)
{
    long longSum = data.Sum(x => (long) x);
    return unchecked ((byte) longSum);
}

我使用long来避免在长流中溢出 - 我假设它将小于2 55 字节:)在实践中你&#39 ;使用int代替long可能没问题。

答案 1 :(得分:3)

LINQ解决方案

public static byte CheckSum(byte[] array)
{
     return array.Aggregate<byte, byte>(0, (current, b) => (byte) ((current + b) & 0xff));
}

答案 2 :(得分:0)

在C#中,将数据读入字节类型数组,并将所有字节添加到单独的字节变量中以获得校验和结果。