# ネイティブモードのチェックサム

ネイティブモードのファイル転送コマンドでは、標準の 16 ビット CRC (Cyclical Redundancy Check 周期冗長検査) チェックサムが使用されます。CRC を計算するアルゴリズムは次のとおりです。この例では、変数 CRC は符号なしの 16 ビットで、入力バイトは 8 ビットです。

1. CRC を 0 に設定します。
2. 次のバイトをデータストリームから取得します。

3. CRC の最上位ビットと入力バイトをテストし、以下を実行します。

   これらが等しい場合は、CRC を 1 つ左にずらします。

   1 つのビットが 0 でもう一方が 1 の場合、CRC を 1 つ左にずらし、XOR を 4129 で計算します。

4. 入力バイトを 1 つ左にずらします。
5. 入力バイトを 8 回ずらさなかった場合は、ステップ 3 に進みます。
6. データストリームにバイトが残っている場合は、ステップ 2 に進みます。

このアルゴリズムの理論的な説明については、「Numerical Recipes in C:The Art of Scientific Computing」を参照してください。1 Press, William H., et al. Cambridge, MA:Cambridge University Press, 1992, 896-901.
CRC を 1 ビットずつ計算する AC 関数は次のとおりです。

    unsigned short CalculateCRC(char* buffer, int size)
    {
      unsigned short cword = 0;
      unsigned short ch;
      int i,j;
      for (i = 0; i < size; i++) {
        ch = buffer[i] << 8;
        for (j = 0; j < 8; j++) {
          if ((ch & 0x8000) ^ (cword & 0x8000)) {
            cword = (cword << 1) ^ 4129;
          }
          else {
            cword <<= 1;
          }
          ch <<= 1;
        }
      }
      return cword;
    }

ビジョンシステム は、16 進数でエンコードされたファイルコンテンツの ASCII 文字値から転送されたファイルのチェックサムを計算します。例:

ファイルのコンテンツ | 0xAB 0xCD 0xEF 0x01
ASCII 表記 | ABCDEF01
確認するバイト値 | 0x41 0x42 0x43 0x44 0x45 0x46 0x30 0x31

ネイティブモードのファイル転送コマンドのこのエンコーディングでは、表示されている 80 文字ごとに一連のキャリッジリターンとラインフィード文字が追加されます。