国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C語言實現(xiàn)AT指令A(yù)SCII碼的拼接處理流程

2020-05-23 13:24:45
字體:
供稿:網(wǎng)友

在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平臺,如圖所示:

C語言,AT指令,ASCII碼,拼接

最終我要在下位機(jī)上實現(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)過參考和修改而成,主要的作用如我所說:

C語言,AT指令,ASCII碼,拼接

比如傳入一個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; } 

運(yùn)行結(jié)果:

C語言,AT指令,ASCII碼,拼接

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對VEVB武林網(wǎng)的支持。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 辽宁省| 西充县| 白水县| 道孚县| 天长市| 磐安县| 巴楚县| 英吉沙县| 祁东县| 昌吉市| 分宜县| 济阳县| 眉山市| 老河口市| 彰化县| 静海县| 罗城| 广安市| 大英县| 绩溪县| 镇江市| 银川市| 尉氏县| 志丹县| 姜堰市| 武夷山市| 西和县| 阿城市| 湖南省| 湖州市| 仁化县| 峨眉山市| 三台县| 鄯善县| 宁明县| 齐河县| 临海市| 郯城县| 内黄县| 平昌县| 庄河市|