我正在使用Python中的接口连接到家庭自动化系统(ElkM1)。我在下面的C#中有示例代码,它明显正确地计算向此系统发送消息时所需的校验和。我把下面的Python代码放在一起,但它似乎没有返回正确的值。在计算校验和时需要帮助
根据文档,消息的校验和需要是mod256中消息的ASCII值的总和,然后作为2s补码。从他们的手册中:“这是消息中除校验和本身和消息结尾的CR-LF终止符之外的消息中所有字符的模数256总和的十六进制2的补码。允许的字符是ASCII 0-9和大写AF,当所有字符被添加到校验和时,值应该等于0。
供应商有一个工具,它将计算正确的校验和。测试数据我一直在使用“00300005000”,这应该返回的74
我的代码校验返回提前18个
感谢。
我的代码(蟒蛇)
def calc_checksum (string):
'''
Calculates checksum for sending commands to the ELKM1.
Sums the ASCII character values mod256 and takes
the Twos complement
'''
sum= 0
for i in range(len(string)) :
sum = sum + ord(string[i])
temp = sum % 256 #mod256
rem = temp^256 #inverse
cc1 = hex(rem)
cc = cc1.upper()
p=len(cc)
return cc[p-2:p]
他们的代码C#:
private string checksum(string s)
{
int sum = 0;
foreach (char c in s)
sum += (int)c;
sum = -(sum % 256);
return ((byte)sum).ToString("X2");
}
使用sum()函数(并避免名为'sum'的变量):
...但我得到了与@martineau相同的结果。 –这与C#输出匹配,请参阅http:// ideone。com/eIkJlh –
谢谢@Mark,我们也很高兴能够学习[ideone.com](http://ideone.com/)。 – martineau