1、.重復(fù)第3與第4步直到8次移位全部完成。此時一個8-bit數(shù)據(jù)處理完畢。6.重復(fù)第2至第5步直到所有數(shù)據(jù)全部處理完成。7.最終CRC寄存器的內(nèi)容即為CRC值。
紫金網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),紫金網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為紫金1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的紫金做網(wǎng)站的公司定做!
2、。同樣的二進制數(shù),假定你定義有符號(signed)類型,則第一位表示的是正負號,0代表正數(shù),1代表負數(shù);而如果定義無符號型(unsigned)的話,第一位為值了。如果用指數(shù)表示,float類型有效數(shù)字為6~7位。
3、按位計算CRC采用CRC-CCITT多項式,多項式為0x11021,C語言編程時,參與計算為0x1021。
4、轉(zhuǎn)換成十進制是:34833 得到余數(shù)是:30660(十進制)換成十六進制是:(77C4)最后將余數(shù)加到第二步后的結(jié)果上:得到:554D77C4 應(yīng)該是這個結(jié)果吧。我也是今天剛看了一下,你可以搜一下CRC的原理。
5、樓主的程序,把變量,都設(shè)定在 xdata 空間。
在用C語言編寫CRC校驗碼的實現(xiàn)程序時我們應(yīng)該注意,生成多項式 對應(yīng)的十六進制數(shù)為0x18005,由于CRC寄存器左移過程中,移出的最高位為1時與 相異或,所以與16bit的CRC寄存器對應(yīng)的生成多項式的十六進制數(shù)可用0x8005表示。
4計算到最后一位時即為整個二進制序列的余數(shù),即為CRC校驗碼。該計算方法相當于對每一位計算,運算過程很容易理解,所占內(nèi)存少,缺點是一位一位計算比較耗時。
你就是想要CRC8-CCITT的代碼,這個到處都是。http:// 我一直有CRC16,沒試過這個,但應(yīng)該差不多。
e.數(shù)據(jù)指針加1,如果數(shù)據(jù)沒有全部處理完,則重復(fù)步驟b (數(shù)據(jù)包括CRC的兩個字節(jié))。f.寄存器組的值是否等于“Magic Value”(0xF0B8),若相等則通過,否則失敗。
按位計算CRC采用CRC-CCITT多項式,多項式為0x11021,C語言編程時,參與計算為0x1021。
樓主程序中調(diào)用函數(shù)cal_crc()的方式不正確。函數(shù)cal_crc()用于計算輸入串的校驗碼,因此函數(shù)輸入?yún)?shù)包含輸入串及該串的長度。
while(len--!=0)這句的len的值循環(huán)一次就減少1,先執(zhí)行l(wèi)en!=0,再執(zhí)行l(wèi)en--。當len為0時退出循環(huán)。for(i=0x80;i!=0;i/=2)0x80是十六進制數(shù),也即128 當i!=0時,執(zhí)行循環(huán)體,然后i=i/2,即i值減半。
只要明白兩次異或運算與原值相同,就不難理解這個程序。
1、物聯(lián)網(wǎng) 服務(wù)器需要檢驗設(shè)備傳輸?shù)臄?shù)據(jù),設(shè)備c語言寫的,CRC8 校驗多項式為x8+x2+x+1,找了百度,必應(yīng)。
2、C語言規(guī)定,在沒有指定函數(shù)的作用范圍時,系統(tǒng)會默認認為是外部函數(shù),因此當需要定義外部函數(shù)時extern也可以省略。
3、C語言規(guī)定總是從main()開始執(zhí)行的(這個函數(shù)也叫“主函數(shù)”)。因此,你發(fā)來的題目中的(8)敘述都是錯誤的,都應(yīng)該選擇F。