gpt4 book ai didi

c# - 如何计算纵向冗余校验 (LRC)?

转载 作者:行者123 更新时间:2023-11-30 13:17:14 25 4
gpt4 key购买 nike

我试过维基百科的例子:http://en.wikipedia.org/wiki/Longitudinal_redundancy_check

这是 lrc (C#) 的代码:

/// <summary>
/// Longitudinal Redundancy Check (LRC) calculator for a byte array.
/// ex) DATA (hex 6 bytes): 02 30 30 31 23 03
/// LRC (hex 1 byte ): EC
/// </summary>
public static byte calculateLRC(byte[] bytes)
{
byte LRC = 0x00;
for (int i = 0; i < bytes.Length; i++)
{
LRC = (LRC + bytes[i]) & 0xFF;
}
return ((LRC ^ 0xFF) + 1) & 0xFF;
}

它说结果是“EC”但我得到“71”,我做错了什么?

谢谢。

最佳答案

这是一个清理后的版本,它不会执行所有这些无用的操作(不是每次都丢弃高位,而是在最后一次丢弃所有高位),它给出了您观察到的结果。这是使用加法的版本,但最后有一个否定 - 还不如减去并跳过否定。即使在溢出的情况下,这也是一个有效的转换。

public static byte calculateLRC(byte[] bytes)
{
int LRC = 0;
for (int i = 0; i < bytes.Length; i++)
{
LRC -= bytes[i];
}
return (byte)LRC;
}

这是替代的 LRC(一个简单的字节异或)

public static byte calculateLRC(byte[] bytes)
{
byte LRC = 0;
for (int i = 0; i < bytes.Length; i++)
{
LRC ^= bytes[i];
}
return LRC;
}

在这种情况下,维基百科在代码(无法编译)和预期结果方面都是错误的。

关于c# - 如何计算纵向冗余校验 (LRC)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12799122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com