문자열 "0AAE0000463130004144430000"이 있고 문자열을 구성하는 16 진수 바이트의 2의 보수 체크섬을 계산해야합니다.16 진수 문자열의 2의 보수 체크섬 계산
예 문자열 수식 위에서
- 합계 값이다 0A + AE + 00 + 00 + 46 + 31 + 30 + 00 + 41 + 44 + 43 + 00 + 00 = 27 (
- 는 = 0xD9로 0x100에서 결과를 빼기) 오버 플로우를 폐기
D9이 예제에 대한 올바른 체크섬,하지만 난 문제가 C#에서 문자열에서 구문 분석 두 자리 16 진수 값을 얻는 데. 내 현재 코드는 다음과 같습니다 :
string output = "0AAE0000463130004144430000";
long checksum = 0;
char[] outputBytes = output.TrimStart(':').ToCharArray();
foreach (var outputByte in outputBytes)
{
checksum += Convert.ToInt32(outputByte);
checksum = checksum & 0xFF;
}
checksum = 256 - checksum;
그러나, 이것은 지금까지 내가 말할 수있는 ASCII 값을 합산하고, 각각의 문자를하고있다.
음을 반환합니다, 당신은 문자열의 각 문자를 통해 가고있다 - 당신이 먼저 바이트 표현으로 각 쌍으로 변환되지 않습니다. – Oded
byte []로 전환하면 outputBytes = GetBytes (output.TrimStart (':'))); 나는 여전히 같은 (잘못된) 값을 얻는다. – Crake