我试过维基百科上的例子: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",我做错了什么?
谢谢。
发布于 2012-10-09 19:46:02
这里有一个清理过的版本,它不会做所有那些无用的操作(而不是每次都丢弃高位,它们最终都会被丢弃),它给出了您观察到的结果。这是使用加法的版本,但在末尾有一个否定--最好减去并跳过否定。这是一个有效的转换,即使在溢出的情况下也是如此。
public static byte calculateLRC(byte[] bytes)
{
int LRC = 0;
for (int i = 0; i < bytes.Length; i++)
{
LRC -= bytes[i];
}
return (byte)LRC;
}下面是另一种LRC (简单的字节xor )
public static byte calculateLRC(byte[] bytes)
{
byte LRC = 0;
for (int i = 0; i < bytes.Length; i++)
{
LRC ^= bytes[i];
}
return LRC;
}在这种情况下,维基百科在代码(无法编译)和预期结果方面都是错误的。
发布于 2013-09-11 06:15:10
我猜这个看起来更酷;)
public static byte calculateLRC(byte[] bytes)
{
return bytes.Aggregate<byte, byte>(0, (x, y) => (byte) (x^ y));
}发布于 2013-10-09 19:24:11
如果有人想要从字符串中获取LRC字符:
public static char CalculateLRC(string toEncode)
{
byte[] bytes = Encoding.ASCII.GetBytes(toEncode);
byte LRC = 0;
for (int i = 0; i < bytes.Length; i++)
{
LRC ^= bytes[i];
}
return Convert.ToChar(LRC);
}https://stackoverflow.com/questions/12799122
复制相似问题