CRC16計算について
CRC16のプログラムを作ったのでデバッグしていて気付いた事なのですが
(産業装置で使うMODBUS-RTUのソフト)
CRC16 x16+x15+x2+1
生成多項式 0xA001
CRC16でCRCを含めたデータを再CRCするとゼロになると言われておりますが
そうならないのですが何故でしょう?
もちろん、自分の作ったソフトが信用できないので他ソフトで検証
具体例
ベクターにあるCRC16の計算ソフト - CRC16.exe
http://blog.goo.ne.jp/masaki_goo_2006/e/50b20edb79f60964faeaefe6fa064469
これに文字列"ABCD" [0x4142,0x4344]を入れて計算実行
出力結果
初期値:0xFFFF、出力XOR:0xFFFF、出力結果、右送り0x0F85
この出力を最初の文字列に追加する
0x4142,0x4344,0x0F85
結果は0xc7e6 となってゼロになりません
やりかたが違うのでしょうか?
尚、私の作ったプログラムと上記ソフトの結果が同じです
また、ネット上にある同様な他ソフトでも同じ結果でした
(もちろんCRC計算条件が同じ物)
尚、上記ソフトで
初期値:0x0000、出力XOR:0x0000、左送り:9AA8
この場合のみCRC追加しての再CRCはゼロになりました
ゼロになる場合とならない場合があるのでしょうか?
補足
ありがとうございます。 けっこういっぱい出てきますが、この中で本当にCRCを計算してくれるものは、 String::CRC Digest::CRC String::CRC32 の3つでしょうか?