ネットワークフレーム処理パイソン、CRCアルゴリズム整数ビット演算子(〜)は、負の回避策を与える場合

コンピュータ内のシンボルの数は3つの方法、すなわち、ある元のコードアンチコードと相補。三つの方法は、2つの大きさのビットと符号ビット部を有する、ビット、シンボルによって表される「n」は0で使用される「負」を表します。

:トランス負原コードシンボル、正のオリジナルコード、反転、相補的コードは同じであり、シンボルビット変化 ;負の補数に元のコード、ビット値のビット単位のシンボルビットの定数、値ビット単位のビット、プラス一端。

しかし、C言語Pythonの不在シンボルタイプとは異なり、整数xのビット反転によってPythonは、シンボルビットの最上位ビット:正と負の交換、すなわち、正、正と負を負となります。単純なビット単位を達成するために、署名されていません、

排他的または実装ビット単位によって完全なデータ。たとえば、あなたが、それはビット単位で行う必要がある16ビットのデータを持っている、これは行います:^ = 0xffffとし

次のC ++の例のPythonの代替アルゴリズム:

C ++コード:

1 UINT8 check_sum(UINT8 * BUF、UINT8 BUFLEN)
 2  {
 3    UINT8 ucCrc = 0 4    UINT8 I;
5    (i = 0 ; iはBUFLENを<; iは++ 6    {
 7      ucCrc + = BUF [i]は、
8    }    
 9    ucCrc =〜ucCrc。
10    ucCrc + = 1 ;
11    リターンucCrc。
12 }

Pythonコード:

1  DEFの:check_sum(DATA)
 2      usCRC = 0
 3。     ためのバイトのデータ:
 4          usCrc + = ORD(バイト)
 5。      Cのビット単位操作で使用されるようusCrc =〜usCrc#ここでは、同じ++をすることができる
6。      usCrc ^ = 0xFFで
 7。      + = 1 usCrc
 。8      リターン ' %02X '%usCrc

 

おすすめ

転載: www.cnblogs.com/fdzwdt/p/11423235.html