資源描述:
《AT指令發(fā)送PDU短信詳解》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、AT指令發(fā)送PDU短信詳解AT指令發(fā)送PDU短信詳解(支持發(fā)送到小靈通)本文以一個(gè)實(shí)例來(lái)解說(shuō)AT指令發(fā)送PDU短信的全過(guò)程,假如我要發(fā)送下面的短信:接收號(hào)碼:+8613602433649短信內(nèi)容:工作愉快!短信中心號(hào)碼:+8613800200500一、短信中心號(hào)碼處理:用字符串a(chǎn)ddr表示1、將短信息中心號(hào)碼去掉+號(hào),看看長(zhǎng)度是否為偶數(shù),如果不是,最后添加F即addr="+8613800200500"=>addr="8613800200500F"2、將奇數(shù)位和偶數(shù)位交換。=>addr="683108200005F0"3、將短信息中心號(hào)碼前面加上字符91,
2、91是國(guó)際化的意思=>addr="91683108200005F0"4、算出addr長(zhǎng)度,結(jié)果除2,格式化成2位的16進(jìn)制字符串,16/2=8=>"08"=>addr="0891683108200005F0"二、手機(jī)號(hào)碼處理:用字符串phone1、將手機(jī)號(hào)碼去掉+號(hào),看看長(zhǎng)度是否為偶數(shù),如果不是,最后添加F即ph=>ph2、將手機(jī)號(hào)碼奇數(shù)位和偶數(shù)位交換。=>phone="683106423346F9"三、短信息部分處理:用字符串msg表示1、轉(zhuǎn)字符串轉(zhuǎn)換為Unicode代碼,例如“工作愉快!”的unicode代碼為5DE54F5C61095FEBFF01
3、,(轉(zhuǎn)換函數(shù)見最后附錄)2、將msg長(zhǎng)度除2,保留兩位16進(jìn)制數(shù),即5DE54F5C61095FEBFF01=20/2=>"0A",再加上msg=>msg="0A5DE54F5C61095FEBFF01"四、組合1、手機(jī)號(hào)碼前加上字符串11000D91(1100:固定,0D:手機(jī)號(hào)碼的長(zhǎng)度,不算+號(hào),十六進(jìn)制表示,91:發(fā)送到手機(jī)為91,發(fā)送到小靈通為81),即phone="11000D91"+phone=>11000D91683106423346F92、手機(jī)號(hào)碼后加上000800和剛才的短信息內(nèi)容,000800也寫死就可以了即phone=phone+"
4、000800"+msg即11000D91683106423346F9+000800+0A5DE54F5C61095FEBFF01=>phone=11000D91683106423346F90008000A5DE54F5C61095FEBFF013、phone長(zhǎng)度除以2,格式化成2位的十進(jìn)制數(shù)即11000D91683106423346F90008000A5DE54F5C61095FEBFF01=>50位/2=>25五、所以要發(fā)送的內(nèi)容為AT+CMGF=0<回車>OKAT+CMGS=25<回車>>addr+phone六、如果返回不是ERR
5、OR,恭喜你,發(fā)送成功了^_^//-----------------------------------------------------//7bit編碼//輸入:pSrc-源字符串指針//nSrcLength-源字符串長(zhǎng)度//輸出:pDst-目標(biāo)編碼串指針//返回:目標(biāo)編碼串長(zhǎng)度intgsmEncode7bit(constchar*pSrc,unsignedchar*pDst,intnSrcLength){intnSrc;//源字符串的計(jì)數(shù)值intnDst;//目標(biāo)編碼串的計(jì)數(shù)值intnChar;//當(dāng)前正在處理的組內(nèi)字符字節(jié)的序號(hào),范圍是0-7un
6、signedcharnLeft;//上一字節(jié)殘余的數(shù)據(jù)//計(jì)數(shù)值初始化nSrc=0;nDst=0;//將源串每8個(gè)字節(jié)分為一組,壓縮成7個(gè)字節(jié)//循環(huán)該處理過(guò)程,直至源串被處理完//如果分組不到8字節(jié),也能正確處理while(nSrc7、Char))
8、nLeft;//將該字節(jié)剩下的左邊部分,作為殘余數(shù)據(jù)保存起來(lái)nLeft=*pSrc>>nChar;//修改目標(biāo)串的指針和計(jì)數(shù)值pDst++;nDst++;}//修改源串的指針和計(jì)數(shù)值pSrc++;nSrc++;}//返回目標(biāo)串長(zhǎng)度returnnDst;}//7bit解碼//輸入:pSrc-源編碼串指針//nSrcLength-源編碼串長(zhǎng)度//輸出:pDst-目標(biāo)字符串指針//返回:目標(biāo)字符串長(zhǎng)度intgsmDecode7bit(constunsignedchar*pSrc,char*pDst,intnSrcLength){intnSrc;/
9、/源字符串的計(jì)數(shù)值intnDst;//目標(biāo)解碼串的計(jì)數(shù)值intnByte;//當(dāng)