如何添加多个字节并获取字节数组?

时间:2013-07-11 08:34:04

标签: c# .net hex byte

给定一个字节数组

byte[] someBytes = { 0xFF, 0xFE, 0xFE, 0xFF, 0x11, 0x00 ,0x00 ,0x00 ,0x00}

将所有字节加起来最好的是什么?手动将所有字节手动添加为十六进制数字将在我上面的例子中产生40B,所以我最好还是喜欢这样的结果:

byte[] byteSum = { 0x04, 0x0B }

实际上,我真正需要的只是0x0B部分(用于校验和)。在这种情况下,校验和由0x0B XOR 0x55(产生0x5E)计算。

我知道这不是正常的字节添加,但这就是校验和的计算方法。

手动循环字节数组并添加它们会产生整数和。

这样做最简洁的方法是什么?

3 个答案:

答案 0 :(得分:2)

ERM,

byte checksum;
foreach (var b in someBytes)
{
    checksum = (byte)((checksum + b) & 0xff);
}

答案 1 :(得分:2)

我不确定我是否理解你的问题...但这就是我要做的事情:

byte sum = 0;
foreach (byte b in someBytes)
{
    unchecked
    {
        sum += b;
    }
}

但这不会产生0x0B,而是产生0x69。

答案 2 :(得分:1)

最后使用LINQ的总和并转换为byte

unchecked
{
    var checksum = (byte)(someBytes.Sum(b => (long)b) ^ 0x55);
}