0

シリアル経由でマシンと通信しています。プロトコル通信仕様の一部には、制御合計は「<'PS'> (含まれる)、<'data'> から <'CS'> までのバイトの算術合計」であると記載されています。

パケット メッセージは次のように構成されています。

<'PS'><'data'><'CS'>、ここで:

<'PS'> - パケット サイズ

長さ: 1

値: 0x02 ~ 0x63

最大パケット長は 99 バイトです

<'data'> - データ

長さ: 1...90 バイト

値: 0x00 - 0xFF

データ部分の長さはコマンドによって異なります。

<'CS'> - チェックサム

長さ - 1 バイト

値: 0x00 - 0xFF

例:

ACK パケット: 0x02 0x01 0x03ここで、0x03 はチェックサムです。

では、C++ でこれらのバイトのチェックサムを計算するにはどうすればよいでしょうか?

4

2 に答える 2

1

チェックサムはモジュロ 256 の単純な合計のようです。

int sum = 0;
for (int j = 0;  j < number_of_bytes_in_message;  ++j)
   sum += message [j];

sum %= 256;  // or, if you prefer  sum &= 255;
于 2010-01-06T16:28:37.953 に答える
1

符号なし 8 ビット型 (uint8_t または unsigned char) をアキュムレータとして使用し、パケットを生成するときに各バイトを追加してから、チェックサム バイトとして送信します。正確には、パケットをどのように構築するかによって異なります。

于 2010-01-06T16:29:44.717 に答える