3

接続されたデバイスからデータを読み込むために pySerial を使用しています。受信した各パケットのチェックサムを計算したい。パケットは char 配列として読み込まれ、実際のチェックサムはパケットの最後の最後のバイトになります。チェックサムを計算するには、通常、パケットのペイロードを合計してから、実際のチェックサムと比較します。

通常、C のような言語では、チェックサム自体が 1 バイトしかないため、オーバーフローが予想されます。Python の内部についてはよくわかりませんが、この言語での私の経験からすると、デフォルトでより大きなサイズの変数 (内部の bigInt クラスなど) になるようです。独自の実装を作成せずに、2 つの文字を追加するという予想される動作を模倣する方法はありますか? ありがとう。

4

3 に答える 3

8

もちろん、結果のモジュラスを取得して、必要なサイズに戻してください。最後またはすべてのステップでモジュラスを実行できます。例えば:

>>> payload = [100, 101, 102, 103, 104] # arbitrary sequence of bytes
>>> sum(payload) % 256 # modulo 256 to make the answer fit in a single byte
254 # this would be your checksum
于 2009-06-10T21:04:45.353 に答える
3

前の例を改善するには、ビットごとに 0xFF を付けます。Pythonがデフォルトで最適化を行うかどうかはわかりません。

sum(bytes) & 0xFF
于 2009-06-10T21:32:32.333 に答える