您好,登錄后才能下訂單哦!
這篇文章主要介紹C語言如何實現(xiàn)AT指令A(yù)SCII碼的拼接處理,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
在GSM模塊、NBIOT模塊、4G模塊的C/C++編程當(dāng)中,很多這樣的模塊已經(jīng)做成了標(biāo)準(zhǔn)的AT指令集,難免涉及到字符串的操作,比如拆分,拼接成一個AT指令。
眾所周知,AT指令我感覺太惡心,為啥要設(shè)計出格式如此復(fù)雜的指令發(fā)送和回復(fù)?不過既然有標(biāo)準(zhǔn),那肯定也有應(yīng)對方法。
最近在使用NBIOT---BC28模塊,我的任務(wù)是將IMEI碼與IMSI碼讀出來后,利用AT指令將其拼接起來后發(fā)到easyiot平臺,如圖所示:
最終我要在下位機上實現(xiàn)發(fā)送該命令將數(shù)據(jù)上報。
AT+QLWULDATAEX=57,01F00035000150FFFFFFCE3436303131313137343535363734353836373732363033303036393336350000016651A049580100040200013191,0x0100 //設(shè)備消息上報
程序源碼實現(xiàn):
首先需要將IMEI和IMSI碼的字符串中的字符全部轉(zhuǎn)換為ASCII碼,我們用到這個函數(shù):
//將字符串(只包含數(shù)字)全部轉(zhuǎn)換成ascii int strnumber_to_asciistr(char *dest,const char *src,int len) { int i = 0 ; if(0 == len || NULL == src || NULL == dest) return -1; else { for(i = 0 ; i < len ; i++,src++) { if(*src < '0' || *src > '9') return -2 ; *dest++ = "0123456789"[*src >> 4]; *dest++ = "0123456789"[*src & 0x0f]; } *dest = '\0'; return 0 ; } }
該函數(shù)源碼由我們?nèi)旱囊粋€資深軟件工程師提供,再經(jīng)過參考和修改而成,主要的作用如我所說:
比如傳入一個src字符串為:0123456789,那么相應(yīng)的dest為30313233343536373839,前提是dest有足夠的內(nèi)存空間。
接下來實現(xiàn)源碼,傳入任意的IMSI碼與IMEI碼,瞬間轉(zhuǎn)化成可以發(fā)送的AT指令:
#include <stdio.h> #include <stdlib.h> #include <string.h> //將字符串(只包含數(shù)字)全部轉(zhuǎn)換成ascii int strnumber_to_asciistr(char *dest,const char *src,int len) { int i = 0 ; if(0 == len || NULL == src || NULL == dest) return -1; else { for(i = 0 ; i < len ; i++,src++) { if(*src < '0' || *src > '9') return -2 ; *dest++ = "0123456789"[*src >> 4]; *dest++ = "0123456789"[*src & 0x0f]; } *dest = '\0'; return 0 ; } } void Send_Data_To_easyiot(char *__imsi,char *__imei,int property ,int status) { char nb_code_buf[30] = {0}; char nb_code_buf1[30] = {0}; char cmd_buf[200] = {0}; u8 serial = 0 ; u8 status_bit = 0 ; //IMSI整體轉(zhuǎn)ASCII strnumber_to_asciistr(nb_code_buf,imei,15); //IMEI整體轉(zhuǎn)ASCII strnumber_to_asciistr(nb_code_buf1,imsi,15); if(property == 1) serial = 2 ; else serial = 1 ; if(status == 0) status_bit = 0x3A; else status_bit = 0x3B; sprintf(cmd_buf,"AT+QLWULDATAEX=57,01F00035000150FFFFFFCE%s%s000001667A5DF5700%d00040%d0001%d%x,0x0100",nb_code_buf,nb_code_buf1,serial,status,status+30,status_bit); printf("拼接AT指令::%s\n",cmd_buf); } int main(void) { int i ; char *_imei = "460111174556744"; char *_imsi = "867726030069368"; char imei[31]; char imsi[31]; char cmd_buf[150]; char value = 0 ; int property = 0; int status = 1 ; printf("原來的imei:%s\n",_imei); printf("原來的imsi:%s\n",_imsi); Send_Data_To_easyiot(_imsi,_imei,1,1); return 0; }
運行結(jié)果:
以上是“C語言如何實現(xiàn)AT指令A(yù)SCII碼的拼接處理”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。