我正在尝试使用Python计算LRC(纵向冗余校验)值。
我的Python代码是从StackOverflow上的其他帖子中提取的。看起来像这样:
lrc = 0
for b in message:
lrc ^= b
print lrc
如果插入值'\ x02 \ x47 \ x30 \ x30 \ x03',则得到的LRC值为70或0x46(F)
但是,我期望的值为68-0x44(D)。
我已经通过C#代码计算出正确的LRC值:
byte LRC = 0;
for (int i = 1; i < bytes.Length; i++)
{
LRC ^= bytes[i];
}
return LRC;
如果插入相同的字节数组值,则得到的预期结果为0x44。
在功能上,代码看起来非常相似。所以我想知道代码之间有什么区别。是我的输入值吗?我应该以其他方式格式化字符串吗?
最佳答案
数组在C#中是0序的,因此从int i = 1;
开始迭代,您将跳过第一个字节。
Python的结果是正确的。
固定参考代码:
byte LRC = 0;
for (int i = 0; i < bytes.Length; i++)
{
LRC ^= bytes[i];
}
return LRC;
为避免此类错误,您应该考虑使用
foreach
语法糖(尽管我对C#惯例不熟悉)。/编辑
要跳过Python中的第一个字节,只需使用slice syntax:
lrc = 0
for b in message[1:]:
lrc ^= b
print lrc