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

Sim*_*mon 3 c#

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

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

8位如何添加?

在C#中需要它.

Jon*_*eet 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;
}
Run Code Online (Sandbox Code Playgroud)

或者,使用LINQ:

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

我正在使用long以避免在长流上溢出 - 我假设它将小于2 55字节:)在实践中你可能会很好用int而不是long.

  • @Simon:它将算术放入未经检查的上下文中:即使程序集的其余部分使用经过检查的算术(即在算术溢出时抛出 OverflowException),这段代码也不会。 (2认同)