校验和模 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;
}
作为奖励,您将获得更 可读性 的代码。
我是电工领域的工业工程专业学生。我不习惯使用 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;
}
作为奖励,您将获得更 可读性 的代码。