求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

 

posted @ 2015-01-30 11:23  杨斌_济南  阅读(3671)  评论(0编辑  收藏  举报