我需要从字节数组计算校验和。它的一些串口包。我有这样的文字:
校验和是使用数据结构中所有字节的8位加法计算的。不考虑溢出(1字节)。
如何添加8位?
在C#中需要它。
答案 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#中,将数据读入字节类型数组,并将所有字节添加到单独的字节变量中以获得校验和结果。