void CRC_16_calc (void) { int i; Crc16Value = 0xffff; for ( i = 0; i < 4; i++ ) { TEMP = Test_Pattern_Data[i]; One_Byte_CRC16_Calc (); } } // void One_Byte_CRC16_Calc (void) { int i; int cf; for (i = 0; i < 8; ++i) { cf = ((Crc16Value & 0x8000) != 0); Crc16Value = Crc16Value << 1; Crc16Value = Crc16Value + ((TEMP & 0x80) >> 7); TEMP = TEMP << 1; if (cf) { Crc16Value = Crc16Value ^ 0x4002; } } }
原理
http://kone.vis.ne.jp/diary/diaryb07.html#031020
アルゴリズム
http://www.wdic.org/w/WDIC/CRC
生成多項式のリスト
http://d.hatena.ne.jp/studiokingyo/20080531
コメント