RFC1071で説明されているように、バイト数が奇数の状況でチェックサムを計算するときは、最後のバイトに0バイトを追加する必要があります。
ただし、「C」コードアルゴリズムでは、最後のバイトのみが追加されます。
上記のコードは、[Z、0]がZに等しいリトルエンディアンのマシンでは機能しますが、[Z、0]がZ*256に等しいビッグエンディアンのマシンには問題があると思います。
では、RFC1071の「C」コードの例はリトルエンディアンのマシンでのみ機能するのでしょうか。
-------------新規追加---------------
RFC1071で説明されている「合計を2つのグループに分割する」例がもう1つあります。
ここでデータを取得できます(addr [] = {0x00、0x01、0xf2})例:
ここで、「標準」は式[ 2 ]で記述された状況を表し、「Cコード」はCコードアルゴリズムの状況を表します。
ご覧のとおり、「標準」の状況では、「スワップ」の後に[Z、0]の抽象形式でエンディアンの問題がないため、エンディアンの違いに関係なく、最終的な合計はf201です。ただし、ビッグエンディアンでもリトルエンディアンでも、f2は常にローバイトであるため、「Cコード」の状況では重要です。
したがって、チェックサムは、異なるエンディアンの同じデータ(addr&count)で可変です。