校验和模 256 C# 的问题

Problems with checksum modulo 256 C#

我是电工领域的工业工程专业学生。我不习惯使用 C#。我正在尝试制作一个由 2 个字节组成的校验和。 校验和使用以下算法计算:

A = 0xFF 
B = 0 

For I FROM 0 TO number_of_bytes -1 DO 
   A := (A + DATA[I]) mod 0x100; 
   B := (B + A) mod 0x100; 
END 

checksum[0] := A 
checksum[1] := B

A、B为字节值,相加modulo 256

当我 运行 程序中断时 A += byteToCalculate[i]; 出现此警告:

"An exception of type 'System.IndexOutOfRangeException' occurred in communicatie.exe but was not handled in user code."

有人可以帮我解决这个问题吗?

    public void ChecksumBerekenen(object sender, EventArgs e)
    {

        byte[] byteToCalculate = new byte[] { 0x00, 0x02, 0x02, 0x00, 0x58, 0x04, 0x00, 0x00, 0x05, 0x00, bytewaarde_2[3], bytewaarde_2[2], bytewaarde_2[1], bytewaarde_2[0] };

        int A = 0xff;
        int B = 0;

        for (int i = 0; i <= byteToCalculate.Length ; i++)
        {
            A += byteToCalculate[i];
            A %= 0x100;

            B += A ;
            B %= 0x100;
        }
        VerstuurdeData.AppendText(A.ToString("x") + " " + B.ToString("x"));
    }

错误在这里:for (int i = 0; i <= byteToCalculate.Length ; i++)

你想要这个for (int i = 0; i < byteToCalculate.Length ; i++)

数组索引是从 0 开始的,因此您想迭代到小于长度的 1。

为了避免这样的讨厌的错误<=而不是必需的<)使用foreach循环:

  foreach (var item in byteToCalculate) {
    A += item;
    A %= 0x100;

    B += A;
    B %= 0x100;
  }

作为奖励,您将获得更 可读性 的代码。