文字列「0AAE0000463130004144430000」があり、文字列を構成する16進バイトの2の補数チェックサムを計算する必要があります。
上記の文字列の例の式は次のとおりです。
- 値を合計します:0A + AE + 00 + 00 + 46 + 31 + 30 + 00 + 41 + 44 + 43 + 00 + 00 = 27(オーバーフローを破棄します)
- 0x100=0xD9から結果を減算します
D9はこの例の正しいチェックサムですが、C#の文字列から2桁の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値を合計し、個々の文字ごとにそれを実行しています。