古詩詞大全網 - 個性簽名 - 跪求24位CRC校驗的C語言程序,生成多項式G (x) = x 24+x 23+x 6+x 5+x+1。

跪求24位CRC校驗的C語言程序,生成多項式G (x) = x 24+x 23+x 6+x 5+x+1。

long int generatechecksumcrc 24 _ D32(無符號long ulNumValues,無符號long *pulData)

{

無符號長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);

}