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

コメント