{
無符號長I,ulData,lfsr = 0xFFFFFF
for(I = 0x 0;我& ltulNumValuesi++)
{
ul data = pul data[I];
lfsr = CRC24_D32(lfsr,ul data);
}
返回lfsr
}
靜態無符號長整型CRC24_D32(常量無符號長整型old_CRC,常量無符號長整型數據)
{
無符號長D[32];
無符號長整型C[24];
無符號長整型new CRC[24];
無符號長整型ulCRC24 _ D32
無符號長整型f,tmp
無符號長整型bit _ mask = 0x 000001;
tmp = 0x000000
//將以前的CRC值轉換為二進制。
bit _ mask = 0x 000001;
for(f = 0;f & lt= 23;f++)
{
c[f]=(old _ CRC & amp;bit_mask)>& gtf;
bit_mask = bit_mask <& lt1;
}
//將數據轉換為二進制。
bit _ mask = 0x 000001;
for(f = 0;f & lt= 31;f++)
{
d[f]=(Data & amp;bit_mask)>& gtf;
bit_mask = bit_mask <& lt1;
}
//計算新的LFSR值。
new CRC[0]= d[31]^ d[30]^ d[29]^ d[28]^ d[27]^ d[26]^ d[25]^
d[24]^ d[23]^ d[17]^ d[16]^ d[15]^ d[14]^ d[13]^
d[12]^ d[11]^ d[10]^ d[9]^ d[8]^ d[7]^ d[6]^
d[5]^ d[4]^ d[3]^ d[2]^ d[1]^ d[0]^ c[0]^ c[1]^
c[2]^ c[3]^ c[4]^ c[5]^ c[6]^ c[7]^ c[8]^ c[9]^
c[15]^ c[16]^ c[17]^ c[18]^ c[19]^ c[20]^ c[21]^
c[22]^ c[23];
new CRC[1]= d[23]^ d[18]^ d[0]^ c[10]^ c[15];
new CRC[2]= d[24]^ d[19]^ d[1]^ c[11]^ c[16];
new CRC[3]= d[25]^ d[20]^ d[2]^ c[12]^ c[17];
new CRC[4]= d[26]^ d[21]^ d[3]^ c[13]^ c[18];
new CRC[5]= d[31]^ d[30]^ d[29]^ d[28]^ d[26]^ d[25]^ d[24]^
d[23]^ d[22]^ d[17]^ d[16]^ d[15]^ d[14]^ d[13]^
d[12]^ d[11]^ d[10]^ d[9]^ d[8]^ d[7]^ d[6]^
d[5]^ d[3]^ d[2]^ d[1]^ d[0]^ c[0]^ c[1]^ c[2]^
c[3]^ c[4]^ c[5]^ c[6]^ c[7]^ c[8]^ c[9]^ c[14]^
c[15]^ c[16]^ c[17]^ c[18]^ c[20]^ c[21]^ c[22]^
c[23];
LFSR代碼示例
簽名是壹個多項式x24+ x23+ x6。
+ x5
+x+1的24位CRC。初始值為0xFFFFFF。
AN-1160
修訂版A |第7頁,共8頁
new CRC[6]= d[28]^ d[18]^ d[5]^ d[0]^ c[10]^ c[20];
new CRC[7]= d[29]^ d[19]^ d[6]^ d[1]^ c[11]^ c[21];
new CRC[8]= d[30]^ d[20]^ d[7]^ d[2]^ c[12]^ c[22];
new CRC[9]= d[31]^ d[21]^ d[8]^ d[3]^ c[0]^ c[13]^ c[23];
new CRC[10]= d[22]^ d[9]^ d[4]^ c[1]^ c[14];
new CRC[11]= d[23]^ d[10]^ d[5]^ c[2]^ c[15];
new CRC[12]= d[24]^ d[11]^ d[6]^ c[3]^ c[16];
new CRC[13]= d[25]^ d[12]^ d[7]^ c[4]^ c[17];
new CRC[14]= d[26]^ d[13]^ d[8]^ c[0]^ c[5]^ c[18];
new CRC[15]= d[27]^ d[14]^ d[9]^ c[1]^ c[6]^ c[19];
new CRC[16]= d[28]^ d[15]^ d[10]^ c[2]^ c[7]^ c[20];
new CRC[17]= d[29]^ d[16]^ d[11]^ c[3]^ c[8]^ c[21];
new CRC[18]= d[30]^ d[17]^ d[12]^ c[4]^ c[9]^ c[22];
new CRC[19]= d[31]^ d[18]^ d[13]^ c[5]^ c[10]^ c[23];
new CRC[20]= d[19]^ d[14]^ c[6]^ c[11];
new CRC[21]= d[20]^ d[15]^ c[7]^ c[12];
new CRC[22]= d[21]^ d[16]^ c[8]^ c[13];
new CRC[23]= d[31]^ d[30]^ d[29]^ d[28]^ d[27]^ d[26]^ d[25]^
d[24]^ d[23]^ d[22]^ d[16]^ d[15]^ d[14]^ d[13]^
d[12]^ d[11]^ d[10]^ d[9]^ d[8]^ d[7]^ d[6]^
d[5]^ d[4]^ d[3]^ d[2]^ d[1]^ d[0]^ c[0]^ c[1]^
c[2]^ c[3]^ c[4]^ c[5]^ c[6]^ c[7]^ c[8]^ c[14]^
c[15]^ c[16]^ c[17]^ c[18]^ c[19]^ c[20]^ c[21]^
c[22]^ c[23];
ulc rc24 _ D32 = 0;
// LFSR值從二進制到十六進制。
bit _ mask = 0x 000001;
for(f = 0;f & lt= 23;f++)
{
ul RCC 24 _ D32 = ul RCC 24 _ D32+new CRC[f]* bit _ mask;
bit_mask = bit_mask <& lt1;
}
return(ulrcc 24 _ D32 & amp;0x 00 ffffff);
}