C語言實現(xiàn)AT指令ASCII碼的拼接處理流程
在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碼的字符串中的字符全部轉(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,那么相應的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é)果:
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接
欄 目:C語言
下一篇:詳解MFC/C++調(diào)用易語言的整數(shù)型和文本型與VS2010互動
本文標題:C語言實現(xiàn)AT指令ASCII碼的拼接處理流程
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/653.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 01-10C#中split用法實例總結(jié)
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10SublimeText編譯C開發(fā)環(huán)境設置


