freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于gsm短消息方式的gps系統(tǒng)通過串口收發(fā)短消息(doc畢設(shè)論文)(編輯修改稿)

2024-07-22 00:44 本頁面
 

【文章內(nèi)容簡介】 呢?A 在上篇中,我們已經(jīng)討論了7bit, 8bit和UCS2這幾種PDU用戶信息的編碼方式,并且給出了實現(xiàn)代碼?,F(xiàn)在,重點描述PDU全串的編碼和解碼過程,以及GSM 。這些是底層的核心代碼,為了保證代碼的可移植性,我們盡可能不用MFC的類,必要時用ANSI C標準庫函數(shù)。首先,定義如下常量和結(jié)構(gòu):// 用戶信息編碼方式define GSM_7BIT 0define GSM_8BIT 4define GSM_UCS2 8 // 短消息參數(shù)結(jié)構(gòu),編碼/解碼共用// 其中,字符串以0結(jié)尾typedef struct { char SCA[16]。 // 短消息服務(wù)中心號碼(SMSC地址) char TPA[16]。 // 目標號碼或回復(fù)號碼(TPDA或TPRA) char TP_PID。 // 用戶信息協(xié)議標識(TPPID) char TP_DCS。 // 用戶信息編碼方式(TPDCS) char TP_SCTS[16]。 // 服務(wù)時間戳字符串(TP_SCTS), 接收時用到 char TP_UD[161]。 // 原始用戶信息(編碼前或解碼后的TPUD) char index。 // 短消息序號,在讀取時用到} SM_PARAM。大家已經(jīng)注意到PDU串中的號碼和時間,都是兩兩顛倒的字符串。利用下面兩個函數(shù)可進行正反變換:// 正常順序的字符串轉(zhuǎn)換為兩兩顛倒的字符串,若長度為奇數(shù),補39。F39。湊成偶數(shù)// 如:8613851872468 683158812764F8// pSrc: 源字符串指針// pDst: 目標字符串指針// nSrcLength: 源字符串長度// 返回: 目標字符串長度int gsmInvertNumbers(const char* pSrc, char* pDst, int nSrcLength){ int nDstLength。 // 目標字符串長度 char ch。 // 用于保存一個字符 // 復(fù)制串長度 nDstLength = nSrcLength。 // 兩兩顛倒 for(int i=0。 inSrcLength。i+=2) { ch = *pSrc++。 // 保存先出現(xiàn)的字符 *pDst++ = *pSrc++。 // 復(fù)制后出現(xiàn)的字符 *pDst++ = ch。 // 復(fù)制先出現(xiàn)的字符 } // 源串長度是奇數(shù)嗎? if(nSrcLength amp。 1) { *(pDst2) = 39。F39。 // 補39。F39。 nDstLength++。 // 目標串長度加1 } // 輸出字符串加個結(jié)束符 *pDst = 39。\039。 // 返回目標字符串長度 return nDstLength。} // 兩兩顛倒的字符串轉(zhuǎn)換為正常順序的字符串// 如:683158812764F8 8613851872468// pSrc: 源字符串指針// pDst: 目標字符串指針// nSrcLength: 源字符串長度// 返回: 目標字符串長度int gsmSerializeNumbers(const char* pSrc, char* pDst, int nSrcLength){ int nDstLength。 // 目標字符串長度 char ch。 // 用于保存一個字符 // 復(fù)制串長度 nDstLength = nSrcLength。 // 兩兩顛倒 for(int i=0。 inSrcLength。i+=2) { ch = *pSrc++。 // 保存先出現(xiàn)的字符 *pDst++ = *pSrc++。 // 復(fù)制后出現(xiàn)的字符 *pDst++ = ch。 // 復(fù)制先出現(xiàn)的字符 } // 最后的字符是39。F39。嗎? if(*(pDst1) == 39。F39。) { pDst。 nDstLength。 // 目標字符串長度減1 } // 輸出字符串加個結(jié)束符 *pDst = 39。\039。 // 返回目標字符串長度 return nDstLength。}以下是PDU全串的編解碼模塊。為簡化編程,有些字段用了固定值。// PDU編碼,用于編制、發(fā)送短消息// pSrc: 源PDU參數(shù)指針// pDst: 目標PDU串指針// 返回: 目標PDU串長度int gsmEncodePdu(const SM_PARAM* pSrc, char* pDst){ int nLength。 // 內(nèi)部用的串長度 int nDstLength。 // 目標PDU串長度 unsigned char buf[256]。 // 內(nèi)部用的緩沖區(qū) // SMSC地址信息段 nLength = strlen(pSrcSCA)。 // SMSC地址字符串的長度 buf[0] = (char)((nLength amp。 1) == 0 ? nLength : nLength + 1) / 2 + 1。 // SMSC地址信息長度 buf[1] = 0x91。 // 固定: 用國際格式號碼 nDstLength = gsmBytes2String(buf, pDst, 2)。 // 轉(zhuǎn)換2個字節(jié)到目標PDU串 nDstLength += gsmInvertNumbers(pSrcSCA, amp。pDst[nDstLength], nLength)。 // 轉(zhuǎn)換SMSC到目標PDU串 // TPDU段基本參數(shù)、目標地址等 nLength = strlen(pSrcTPA)。 // TPDA地址字符串的長度 buf[0] = 0x11。 // 是發(fā)送短信(TPMTI=01),TPVP用相對格式(TPVPF=10) buf[1] = 0。 // TPMR=0 buf[2] = (char)nLength。 // 目標地址數(shù)字個數(shù)(TPDA地址字符串真實長度) buf[3] = 0x91。 // 固定: 用國際格式號碼 nDstLength += gsmBytes2String(buf, amp。pDst[nDstLength], 4)。 // 轉(zhuǎn)換4個字節(jié)到目標PDU串 nDstLength += gsmInvertNumbers(pSrcTPA, amp。pDst[nDstLength], nLength)。 // 轉(zhuǎn)換TPDA到目標PDU串 // TPDU段協(xié)議標識、編碼方式、用戶信息等 nLength = strlen(pSrcTP_UD)。 // 用戶信息字符串的長度 buf[0] = pSrcTP_PID。 // 協(xié)議標識(TPPID) buf[1] = pSrcTP_DCS。 // 用戶信息編碼方式(TPDCS) buf[2] = 0。 // 有效期(TPVP)為5分鐘 if(pSrcTP_DCS == GSM_7BIT) { // 7bit編碼方式 buf[3] = nLength。 // 編碼前長度 nLength = gsmEncode7bit(pSrcTP_UD, amp。buf[4], nLength+1) + 4。 // 轉(zhuǎn)換TPDA到目標PDU串 } else if(pSrcTP_DCS == GSM_UCS2) { // UCS2編碼方式 buf[3] = gsmEncodeUcs2(pSrcTP_UD, amp。buf[4], nLength)。 // 轉(zhuǎn)換TPDA到目標PDU串 nLength = buf[3] + 4。 // nLength等于該段數(shù)據(jù)長度 } else { // 8bit編碼方式 buf[3] = gsmEncode8bit(pSrc
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1