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

正文內(nèi)容

基于短信收發(fā)系統(tǒng)畢業(yè)設(shè)計(jì)-文庫吧

2025-01-03 15:19 本頁面


【正文】 // 修改源串的指針和計(jì)數(shù)值 pSrc++。 nSrc++。 } // 返回目標(biāo)串長度 return nDst。 } // 7bit解碼// pSrc: 源編碼串指針// pDst: 目標(biāo)字符串指針// nSrcLength: 源編碼串長度// 返回: 目標(biāo)字符串長度int gsmDecode7bit(const unsigned char* pSrc, char* pDst, int nSrcLength){ int nSrc。 // 源字符串的計(jì)數(shù)值 int nDst。 // 目標(biāo)解碼串的計(jì)數(shù)值 int nByte。 // 當(dāng)前正在處理的組內(nèi)字節(jié)的序號,范圍是06 unsigned char nLeft。 // 上一字節(jié)殘余的數(shù)據(jù) // 計(jì)數(shù)值初始化 nSrc = 0。 nDst = 0。 // 組內(nèi)字節(jié)序號和殘余數(shù)據(jù)初始化 nByte = 0。 nLeft = 0。 // 將源數(shù)據(jù)每7個字節(jié)分為一組,解壓縮成8個字節(jié) // 循環(huán)該處理過程,直至源數(shù)據(jù)被處理完 // 如果分組不到7字節(jié),也能正確處理 while(nSrcnSrcLength) { // 將源字節(jié)右邊部分與殘余數(shù)據(jù)相加,去掉最高位,得到一個目標(biāo)解碼字節(jié) *pDst = ((*pSrc nByte) | nLeft) amp。 0x7f。 // 將該字節(jié)剩下的左邊部分,作為殘余數(shù)據(jù)保存起來 nLeft = *pSrc (7nByte)。 // 修改目標(biāo)串的指針和計(jì)數(shù)值 pDst++。 nDst++。 // 修改字節(jié)計(jì)數(shù)值 nByte++。 // 到了一組的最后一個字節(jié) if(nByte == 7) { // 額外得到一個目標(biāo)解碼字節(jié) *pDst = nLeft。 // 修改目標(biāo)串的指針和計(jì)數(shù)值 pDst++。 nDst++。 // 組內(nèi)字節(jié)序號和殘余數(shù)據(jù)初始化 nByte = 0。 nLeft = 0。 } // 修改源串的指針和計(jì)數(shù)值 pSrc++。 nSrc++。 } *pDst = 0。 // 返回目標(biāo)串長度 return nDst。}需要指出的是,7bit的字符集與ANSI標(biāo)準(zhǔn)字符集不完全一致,在0x20以下也排布了一些可打印字符,但英文字母、阿拉伯?dāng)?shù)字和常用符號的位置兩者是一樣的。用上面介紹的算法收發(fā)純英文短消息,一般情況應(yīng)該是夠用了。如果是法語、德語、西班牙語等,含有 “229?!薄?“233。”這一類字符,則要按上面編碼的輸出去查表,請參閱GSM 。8bit編碼其實(shí)沒有規(guī)定什么具體的算法,不需要介紹。 UCS2編解碼代碼實(shí)現(xiàn)UCS2編碼是將每個字符(12個字節(jié))按照ISO/IEC10646的規(guī)定,轉(zhuǎn)變?yōu)?6位的Unicode寬字符。在Windows系統(tǒng)中,特別是在2000/XP中,可以簡單地調(diào)用API 函數(shù)實(shí)現(xiàn)編碼和解碼。如果沒有系統(tǒng)的支持,比如用單片機(jī)控制手機(jī)模塊收發(fā)短消息,只好用查表法解決了。Windows環(huán)境下,用C實(shí)現(xiàn)UCS2編碼和解碼的算法如下:// UCS2編碼// pSrc: 源字符串指針// pDst: 目標(biāo)編碼串指針// nSrcLength: 源字符串長度// 返回: 目標(biāo)編碼串長度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。 } // 返回目標(biāo)編碼串長度 return nDstLength * 2。} // UCS2解碼// pSrc: 源編碼串指針// pDst: 目標(biāo)字符串指針// nSrcLength: 源編碼串長度// 返回: 目標(biāo)字符串長度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。 // 返回目標(biāo)字符串長度 return nDstLength。} 打印字符串和字節(jié)數(shù)據(jù)之間相互轉(zhuǎn)換用以上編碼和解碼模塊,還不能將短消息字符串編碼為PDU串需要的格式,也不能直接將PDU串中的用戶信息解碼為短消息字符串,因?yàn)檫€差一個在可打印字符串和字節(jié)數(shù)據(jù)之間相互轉(zhuǎn)換的環(huán)節(jié)??梢匝h(huán)調(diào)用sscanf和sprintf函數(shù)實(shí)現(xiàn)這種變換。下面提供不用這些函數(shù)的算法,它們也適用于單片機(jī)、DSP編程環(huán)境。// 可打印字符串轉(zhuǎn)換為字節(jié)數(shù)據(jù)// 如:C8329BFD0E01 {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}// pSrc: 源字符串指針// pDst: 目標(biāo)數(shù)據(jù)指針// nSrcLength: 源字符串長度// 返回: 目標(biāo)數(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++。 } // 返回目標(biāo)數(shù)據(jù)長度 returnnSrcLength / 2。} // 字節(jié)數(shù)據(jù)轉(zhuǎn)換為可打印字符串// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} C8329BFD0E01 // pSrc: 源數(shù)據(jù)指針// pDst: 目標(biāo)字符串指針// nSrcLength: 源數(shù)據(jù)長度// 返回: 目標(biāo)字符串長度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。 // 返回目標(biāo)字符串長度 return nSrcLength * 2。} PDU全串的編碼和解碼在上節(jié)中,我們已經(jīng)討論了7bit, 8bit和UCS2這幾種PDU用戶信息的編碼方式,并且給出了實(shí)現(xiàn)代碼?,F(xiàn)在,重點(diǎn)描述PDU全串的編碼和解碼過程,以及GSM 。這些是底層的核心代碼,為了保證代碼的可移植性,我們盡可能不用MFC的類,必要時用ANSI C標(biāo)準(zhǔn)庫函數(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]。 // 目標(biāo)號碼或回復(fù)號碼(TPDA或TPRA) char TP_PID。 // 用戶信息協(xié)議標(biāo)識(TPPID) char TP_DCS。 // 用戶信息編碼方式(TPDCS) char TP_SCTS[16]。 // 服務(wù)時間戳字符串(TP_SCTS), 接收時用到 char TP_UD[161]。 // 原始用戶信息(編碼前或解碼后的TPUD) char index。 // 短消息序號,在讀取時用到} SM_PARAM。以下是PDU全串的編解碼模塊。為簡化編程,有些字段用了固定值。// PDU編碼,用于編制、發(fā)送短消息// pSrc: 源PDU參數(shù)指針// pDst: 目標(biāo)PDU串指針// 返回: 目標(biāo)PDU串長度int gsmEncodePdu(const SM_PARAM* pSrc, char* pDst){ int nLength。 // 內(nèi)部用的串長度 int nDstLength。 // 目標(biāo)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é)到目標(biāo)PDU串 nDstLength += gsmInvertNumbers(pSrcSCA, amp。pDst[nDstLength], nLength)。 // 轉(zhuǎn)換SMSC到目標(biāo)PDU串 // TPDU段基本參數(shù)、目標(biāo)地址等 nLength = strlen(pS
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1