while(len--!=0)
在奉賢等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站建設、做網(wǎng)站 網(wǎng)站設計制作按需策劃設計,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站制作,全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站制作,奉賢網(wǎng)站建設費用合理。
這句的len的值循環(huán)一次就減少1,先執(zhí)行l(wèi)en!=0,再執(zhí)行腔衫len--。
當len為0時退出循環(huán)前圓鋒。
for(i=0x80;
i!=0;
i/=2)
0x80是十慧晌六進制數(shù),也即128
當i!=0時,執(zhí)行循環(huán)體,
然后i=i/2,即i值減半。
unsigned short crc_dsp(unsigned short reg, unsigned char data_crc)
//reg為crc寄迅巖存器, data_crc為將要處理的猜鍵8bit數(shù)據(jù)流
{
unsigned short msb; //crc寄存器將移出的最高1bit
unsigned short data;
unsigned short gx = 0x8005, i = 0; //i為左移畝兆御次數(shù), gx為生成多項式
data = (unsigned short)data_crc;
data = data 8;
reg = reg ^ data;
do
{
msb = reg 0x8000;
reg = reg 1;
if(msb == 0x8000)
{
reg = reg ^ gx;
}
i++;
}
while(i 8);
return (reg);
}
把我知道的說一下:
碼流后面加8個0可以用移位得到(碼流8;)
單次異桐消或運算可以用運算符:^(運算符兩邊為常數(shù))
由于你校驗的是5個字節(jié),且要多次異或運算,所以得借助數(shù)組,或其它的數(shù)據(jù)結(jié)果才能完成局返。
最后問一下你是做硬局臘知件的嗎
下面我們以CRC-16為例來說明任意長度數(shù)據(jù)流的CRC校驗碼生成過程。我們采用將數(shù)據(jù)流分成若干個8bit字符,并由低字節(jié)到高字絕塌節(jié)傳送的并行方法來求CRC校驗碼。具體計算過程為:用一個16bit的寄存器來存放CRC校驗值,且設定其初值為0x0000;將數(shù)據(jù)流的第一個8bit與16bit的CRC寄存器的高字節(jié)相異或,并將結(jié)果存入CRC寄存器高字節(jié);CRC寄存器左移一位,最低1bit補零,同時檢查移出的最高1bit,若移出的最高1bit為0,則繼續(xù)按上述過程左移,若最高1bit為1,則將CRC寄存器中的值與生成多項式碼相異或,結(jié)果存入CRC寄存器值;繼續(xù)左移并重復上述處理方法,直到將8bit數(shù)據(jù)處理完為止,則此時CRC寄存器中的值就是第一個8bit數(shù)據(jù)對應的CRC校驗碼;然后將此時CRC寄存器的值作為初值,用同樣的處理方法重復上述步驟來處理下一個8bit數(shù)據(jù)流,直到將所有的8bit字符都處理完后,此刻CRC寄存器中的值即為整個數(shù)據(jù)流對應的CRC校驗碼。
下面示出了其計算過程的流程圖:
在用C語言編寫CRC校驗碼的實現(xiàn)程序時我們應該注意,生成多項式 對應的十六進制數(shù)為0x18005,由于CRC寄存器左移過程中,移出的最高位為1時與 相異或,所以與16bit的CRC寄存器對應并塌圓的生成多項式的十六進制數(shù)可用0x8005表示。下面給出并行處理8bit數(shù)據(jù)流的C源程序:
unsigned short crc_dsp(unsigned short reg, unsigned char data_crc)
//reg為crc寄存器, data_crc為將要處理的8bit數(shù)據(jù)流
{
unsigned short msb; //crc寄存器將移出的最高1bit
unsigned short data;
unsigned short gx = 0x8005, i = 0; //i為左移次數(shù), gx為生成多項式
data = (unsigned short)data_crc;
data = data 8;
reg = reg ^ data;
do
{
msb = reg 0x8000;
reg = reg 1;
if(msb == 0x8000)
{
reg = reg ^ gx;
}
i++;
}
while(i 8);
return (reg);
}
以上為處理每一個8bit數(shù)據(jù)流的子程序,在計衫扮算整個數(shù)據(jù)流的CRC校驗碼時,我們只需將CRC_reg的初值置為0x0000,求第一個8bit的CRC值,之后,即可將上次求得的CRC值和本次將要處理的8bit數(shù)據(jù)作為函數(shù)實參傳遞給上述子程序的形參進行處理即可,最終返回的reg值便是我們所想得到的整個數(shù)據(jù)流的CRC校驗值。
名稱欄目:Crc校驗函數(shù)c語言 crc校驗碼c語言
文章路徑:http://m.newbst.com/article10/ddpgddo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、手機網(wǎng)站建設、定制開發(fā)、外貿(mào)網(wǎng)站建設、服務器托管、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)