求CRC校驗和的低位和高位的兩種方式


 

 

方式1

    unsigned short shrCRCCheckSum = 0;  // 校驗和

 

1             char tstCRCChecksum[2];
2             memcpy(tstCRCChecksum,&shrCRCCheckSum,2);    // shrCRCCheckSum:216D
3             LOGI("=================>Test tstCRCChecksum[0] 低位 :%x",tstCRCChecksum[0]); // 6d
4             LOGI("=================>Test tstCRCChecksum[1] 高位 :%x",tstCRCChecksum[1]); // 21

 

 

方式2

    unsigned short shrCRCCheckSum = 0; // 校驗和
 1 /*
 2  * 方    法:substring()
 3  * 功    能:截取字符串
 4  * 參    數:char* ch :要轉換的 字符串指針
 5  *      int pos   :截取的開始位置
 6  *      int length:截取字符的長度
 7  * 返回值:char* :結果字符串指針
 8  */
 9 char* substring(char* ch,int pos,int length)
10 {
11     char* pch=ch;
12     //定義一個字符指針,指向傳遞進來的ch地址。
13     char* subch=(char*)calloc(sizeof(char),length+1);
14     //通過calloc來分配一個length長度的字符數組,返回的是字符指針。
15     int i;
16     //只有在C99下for循環中才可以聲明變量,這里寫在外面,提高兼容性。
17     pch=pch+pos;
18     //是pch指針指向pos位置。
19     for(i=0;i<length;i++)
20     {
21         subch[i]=*(pch++);
22         //循環遍歷賦值數組。
23     }
24     subch[length]='\0';//加上字符串結束符。
25 
26     return subch;       //返回分配的字符數組地址。
27 }
            //求[CRC校驗和]
            sprintf(chrCRCCheckSum, "%04X", shrCRCCheckSum);  // shrCRCCheckSum:216D
            LOGI("=================>[CRC校驗和] :%s",chrCRCCheckSum);

            // 求得高位CRC
            chrMSB = substring(chrCRCCheckSum,0,2);   //chrMSB的值是比如是6D
            char chrConverMSB;
            sscanf(chrMSB, "%x", &chrConverMSB);
            Cmd[134] = chrConverMSB;
            LOGI("=================>[高位CRC] Cmd[134] :%x",chrConverMSB);  // 21

            // 求得低位CRC
            chrLSB = substring(chrCRCCheckSum,2,2);
            char chrConvertLSB;
            sscanf(chrLSB, "%x", &chrConvertLSB);
            Cmd[2] = chrConvertLSB;
            LOGI("=================>[低位CRC] Cmd[2] :%x",chrConvertLSB);// 6d

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM