저는 Python의 홈 자동화 시스템 (ElkM1)에 대한 인터페이스 작업을하고 있습니다. 이 시스템에 메시지를 보낼 때 필요한 체크섬을 올바르게 계산하는 C# 아래 샘플 코드가 있습니다. 아래의 파이썬 코드를 조합했지만 정확한 값을 반환하지 않는 것 같습니다.체크섬 계산에 도움이 필요합니다
설명서에 따르면 메시지의 체크섬은 mod256의 메시지 ASCII 값의 합계가 2의 보수로 취해 져야합니다. 설명서에서 "이것은 체크섬 자체와 메시지 끝의 CR-LF 종결자를 제외한 메시지의 모든 문자의 ASCII 값을 모듈로 256 합계로 16 진수로 2를 더한 것입니다. 허용되는 문자는 ASCII 0-9 및 대문자 AF 모든 문자가 체크섬에 추가되면 값은 0이어야합니다. "
벤더에는 올바른 체크섬을 계산하는 도구가 있습니다. 테스트 데이터로 내가 사용하는 74
내 코드의 체크섬을 반환해야 '00300005000'은 사전에 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");
}
은 Using sum() 함수를 사용하면 ('sum'이라는 변수를 사용하지 않아도됩니다.)
... 그러나 @martineau와 같은 결과를 얻습니다. –이것은 http : // ideone을 참조하여 C# 출력과 일치합니다.com/eIkJlh –
감사합니다. @Mark, [ideone.com] (http://ideone.com/)과 같은 것이 있다는 것을 배우는 것도 좋았습니다. – martineau