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

首頁 > 編程 > C > 正文

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

2020-01-26 13:37:26
字體:
來源:轉載
供稿:網(wǎng)友

在GSM模塊、NBIOT模塊、4G模塊的C/C++編程當中,很多這樣的模塊已經(jīng)做成了標準的AT指令集,難免涉及到字符串的操作,比如拆分,拼接成一個AT指令。

眾所周知,AT指令我感覺太惡心,為啥要設計出格式如此復雜的指令發(fā)送和回復?不過既然有標準,那肯定也有應對方法。

最近在使用NBIOT---BC28模塊,我的任務是將IMEI碼與IMSI碼讀出來后,利用AT指令將其拼接起來后發(fā)到easyiot平臺,如圖所示:

最終我要在下位機上實現(xiàn)發(fā)送該命令將數(shù)據(jù)上報。

AT+QLWULDATAEX=57,01F00035000150FFFFFFCE3436303131313137343535363734353836373732363033303036393336350000016651A049580100040200013191,0x0100 //設備消息上報

程序源碼實現(xiàn):

首先需要將IMEI和IMSI碼的字符串中的字符全部轉換為ASCII碼,我們用到這個函數(shù):

//將字符串(只包含數(shù)字)全部轉換成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ù)源碼由我們群的一個資深軟件工程師提供,再經(jīng)過參考和修改而成,主要的作用如我所說:

比如傳入一個src字符串為:0123456789,那么相應的dest為30313233343536373839,前提是dest有足夠的內存空間。

接下來實現(xiàn)源碼,傳入任意的IMSI碼與IMEI碼,瞬間轉化成可以發(fā)送的AT指令:

#include <stdio.h>#include <stdlib.h>#include <string.h>//將字符串(只包含數(shù)字)全部轉換成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整體轉ASCII  strnumber_to_asciistr(nb_code_buf,imei,15);  //IMEI整體轉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; } 

運行結果:

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網(wǎng)的支持。如果你想了解更多相關內容請查看下面相關鏈接

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 安仁县| 湖南省| 泾源县| 河北省| 安丘市| 光泽县| 玉门市| 江永县| 陆川县| 泊头市| 呼和浩特市| 广州市| 肇州县| 铁岭县| 吉林市| 霍林郭勒市| 四子王旗| 松溪县| 灌阳县| 德昌县| 建瓯市| 开远市| 德惠市| 庆元县| 扶风县| 本溪| 南江县| 正安县| 庆云县| 湖南省| 克东县| 阳信县| 夏邑县| 漳州市| 奎屯市| 商河县| 广河县| 乳源| 祁连县| 呈贡县| 东兴市|