我必须从以下位置提取LRC:“ 02 02 30 30 30 30 30 30 30 30 30 30 30 31 31 30 30 1c 35 32 33 1c 1c 2b 30 1c 39 34 36 1c 1c 1c 1c 1c 1c 1c 1c 1c 1c 1c 1c 1c 30 30 1c 1c 1c 1c 1c 1c 03“,最核心的答案必须是:” 3B“
我测试了以下代码,但结果错误。
public static byte calculateLRC(byte[] bytes)
{
int LRC = 0;
for (int i = 0; i < bytes.Length; i++)
{
LRC -= bytes[i];
}
return (byte)LRC;
}
private static byte calculateLRC2(byte[] b)
{
byte lrc = 0x00;
for (int i = 0; i < b.Length; i++)
{
lrc = (byte)((lrc + b[i]) & 0xFF);
}
lrc = (byte)(((lrc ^ 0xff) + 2) & 0xFF);
return lrc;
}
public static char CalculateLRC3(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);
}
public static byte calculateLRC4(byte[] bytes)
{
return bytes.Aggregate<byte, byte>(0, (x, y) => (byte)(x ^ y));
}
我正在等待您的答复,谢谢!!
答案 0 :(得分:0)
看着Wikipedia article for LRC,它说LRC的伪代码是
Set LRC = 0
For each byte b in the buffer
do
Set LRC = (LRC + b) AND 0xFF
end do
Set LRC = (((LRC XOR 0xFF) + 1) AND 0xFF)
这似乎类似于您的calculateLRC2
函数,但是您正在执行+ 2
而不是上面规定的+ 1
。可能是问题所在吗?