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

正文內(nèi)容

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

2025-06-10 00:44 本頁面


【正文】 eft = 0。 // 將源數(shù)據(jù)每7個字節(jié)分為一組,解壓縮成8個字節(jié) // 循環(huán)該處理過程,直至源數(shù)據(jù)被處理完 // 如果分組不到7字節(jié),也能正確處理 while(nSrcnSrcLength) { // 將源字節(jié)右邊部分與殘余數(shù)據(jù)相加,去掉最高位,得到一個目標解碼字節(jié) *pDst = ((*pSrc nByte) | nLeft) amp。 0x7f。 // 將該字節(jié)剩下的左邊部分,作為殘余數(shù)據(jù)保存起來 nLeft = *pSrc (7nByte)。 // 修改目標串的指針和計數(shù)值 pDst++。 nDst++。 // 修改字節(jié)計數(shù)值 nByte++。 // 到了一組的最后一個字節(jié) if(nByte == 7) { // 額外得到一個目標解碼字節(jié) *pDst = nLeft。 // 修改目標串的指針和計數(shù)值 pDst++。 nDst++。 // 組內(nèi)字節(jié)序號和殘余數(shù)據(jù)初始化 nByte = 0。 nLeft = 0。 } // 修改源串的指針和計數(shù)值 pSrc++。 nSrc++。 } *pDst = 0。 // 返回目標串長度 return nDst。}需要指出的是,7bit的字符集與ANSI標準字符集不完全一致,在0x20以下也排布了一些可打印字符,但英文字母、阿拉伯數(shù)字和常用符號的位置兩者是一樣的。用上面介紹的算法收發(fā)純英文短消息,一般情況應(yīng)該是夠用了。如果是法語、德語、西班牙語等,含有 “229?!?、 “233?!边@一類字符,則要按上面編碼的輸出去查表,請參閱GSM 。8bit編碼其實沒有規(guī)定什么具體的算法,不需要介紹。UCS2編碼是將每個字符(12個字節(jié))按照ISO/IEC10646的規(guī)定,轉(zhuǎn)變?yōu)?6位的Unicode寬字符。在Windows系統(tǒng)中,特別是在2000/XP中,可以簡單地調(diào)用API 函數(shù)實現(xiàn)編碼和解碼。如果沒有系統(tǒng)的支持,比如用單片機控制手機模塊收發(fā)短消息,只好用查表法解決了。Windows環(huán)境下,用C實現(xiàn)UCS2編碼和解碼的算法如下:// UCS2編碼// pSrc: 源字符串指針// pDst: 目標編碼串指針// nSrcLength: 源字符串長度// 返回: 目標編碼串長度int gsmEncodeUcs2(const char* pSrc, unsigned char* pDst, int nSrcLength){ int nDstLength。 // UNICODE寬字符數(shù)目 WCHAR wchar[128]。 // UNICODE串緩沖區(qū) // 字符串UNICODE串 nDstLength = ::MultiByteToWideChar(CP_ACP, 0, pSrc, nSrcLength, wchar, 128)。 // 高低字節(jié)對調(diào),輸出 for(int i=0。 inDstLength。 i++) { // 先輸出高位字節(jié) *pDst++ = wchar[i] 8。 // 后輸出低位字節(jié) *pDst++ = wchar[i] amp。 0xff。 } // 返回目標編碼串長度 return nDstLength * 2。} // UCS2解碼// pSrc: 源編碼串指針// pDst: 目標字符串指針// nSrcLength: 源編碼串長度// 返回: 目標字符串長度int gsmDecodeUcs2(const unsigned char* pSrc, char* pDst, int nSrcLength){ int nDstLength。 // UNICODE寬字符數(shù)目 WCHAR wchar[128]。 // UNICODE串緩沖區(qū) // 高低字節(jié)對調(diào),拼成UNICODE for(int i=0。 inSrcLength/2。 i++) { // 先高位字節(jié) wchar[i] = *pSrc++ 8。 // 后低位字節(jié) wchar[i] |= *pSrc++。 } // UNICODE串字符串 nDstLength = ::WideCharToMultiByte(CP_ACP, 0, wchar, nSrcLength/2, pDst, 160, NULL, NULL)。 // 輸出字符串加個結(jié)束符 pDst[nDstLength] = 39。\039。 // 返回目標字符串長度 return nDstLength。}用以上編碼和解碼模塊,還不能將短消息字符串編碼為PDU串需要的格式,也不能直接將PDU串中的用戶信息解碼為短消息字符串,因為還差一個在可打印字符串和字節(jié)數(shù)據(jù)之間相互轉(zhuǎn)換的環(huán)節(jié)??梢匝h(huán)調(diào)用sscanf和sprintf函數(shù)實現(xiàn)這種變換。下面提供不用這些函數(shù)的算法,它們也適用于單片機、 DSP編程環(huán)境。// 可打印字符串轉(zhuǎn)換為字節(jié)數(shù)據(jù)// 如:C8329BFD0E01 {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}// pSrc: 源字符串指針// pDst: 目標數(shù)據(jù)指針// nSrcLength: 源字符串長度// 返回: 目標數(shù)據(jù)長度int gsmString2Bytes(const char* pSrc, unsigned char* pDst, int nSrcLength){ for(int i=0。 inSrcLength。 i+=2) { // 輸出高4位 if(*pSrc=39。039。 amp。amp。 *pSrc=39。939。) { *pDst = (*pSrc 39。039。) 4。 } else { *pDst = (*pSrc 39。A39。 + 10) 4。 } pSrc++。 // 輸出低4位 if(*pSrc=39。039。 amp。amp。 *pSrc=39。939。) { *pDst |= *pSrc 39。039。 } else { *pDst |= *pSrc 39。A39。 + 10。 } pSrc++。 pDst++。 } // 返回目標數(shù)據(jù)長度 returnnSrcLength / 2。} // 字節(jié)數(shù)據(jù)轉(zhuǎn)換為可打印字符串// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} C8329BFD0E01 // pSrc: 源數(shù)據(jù)指針// pDst: 目標字符串指針// nSrcLength: 源數(shù)據(jù)長度// 返回: 目標字符串長度int gsmBytes2String(const unsigned char* pSrc, char* pDst, int nSrcLength){ const char tab[]=0123456789ABCDEF。 // 0x00xf的字符查找表 for(int i=0。 inSrcLength。 i++) { // 輸出低4位 *pDst++ = tab[*pSrc 4]。 // 輸出高4位 *pDst++ = tab[*pSrc amp。 0x0f]。 pSrc++。 } // 輸出字符串加個結(jié)束符 *pDst = 39。\039。 // 返回目標字符串長度 return nSrcLength * 2。}Q PDU的核心編碼方式已經(jīng)清楚了,如何實現(xiàn)用AT命令收發(fā)短消息
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1