シリアル ハードウェアからの 6 バイト メッセージを処理しています。メーカーのマニュアルでは、各メッセージのチェックサム (6 番目のバイト) は「残りのメッセージの合計の下位バイト」で構成されていると説明されています。
私はまだこれらの例をすべて試していません。最初の「分析された」例で私の作業を示しましょう。
これは、提供されている式です。
Low byte of 0xB2 + 0x00 + 0x69 + 0x1A + 0x83 = 0x68
したがって、合計は 0x1B8 です。最初の 8 ビットを取得すると、0xB8になり ます。
私は少し考えて、ああ、代わりにビットごとの操作を行うだけかもしれないと推測しました。それは古いハードウェアではかなり一般的ですよね? そこで、各パーツのビットを書き出して、シリーズを XOR しました...
- 0xB2 ^ 0x00 = 0xB2 (当然)
- 0xB2 ^ 0x69 = 0xDB
- 0xDB ^ 0x1A = 0xC1
- 0xC1 ^ 0x83 = 0x42
私はこれを手と電卓で行いました。同じ結果です。
プログラムで計算を再現できました。チェックサムは、ハードウェアが出力しているものとはかなり異なります。マニュアルのモデル番号は、私が持っているハードウェアと一致しています...
合計の各部分のバイナリを見ると、文書化された各出力の明確なパターンを確認できるかどうかわかりません。一部のチェックサムでは、IPv4 ヘッダーのように、キャリーがシフトされるか、チェックサムに追加されます。
私の質問は:
このチェックサムの計算方法に数学的な誤りがありますか?
どんな助けでも大歓迎です!ありがとうございました。