亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sms.c.bak

?? w77E58開發的具備藍牙功能的GPS導航儀
?? BAK
?? 第 1 頁 / 共 2 頁
字號:
#include <w77e58.h>
#include "global.h"
#include "serial.h"
#include "m32.h"


/************************************************************************************************
*                   int gsmEncode7bit(const char* pSrc, unsigned char* pDst, int nSrcLength) 
* 7-bit編碼 
* pSrc: 源字符串指針 
* pDst: 目標編碼串指針 
* nSrcLength: 源字符串長度 
* 返回: 目標編碼串長度
***************************************************************************************/
int gsmEncode7bit(const char* pSrc, unsigned char* pDst, int nSrcLength) 
{   
      int nSrc;               // 源字符串的計數值     
      int nDst;               // 目標編碼串的計數值    
      int nChar;              // 當前正在處理的組內字符字節的序號,范圍是0-7   
      unsigned char nLeft;    // 上一字節殘余的數據    
#if 0
      // 計數值初始化     
      nSrc = 0;     
      nDst = 0;    
      // 將源串每8個字節分為一組,壓縮成7個字節 
      // 循環該處理過程,直至源串被處理完  
      // 如果分組不到8字節,也能正確處理  
      while(nSrc<nSrcLength) 
      {        
         // 取源字符串的計數值的最低3位         
         nChar = nSrc & 7;           
         // 處理源串的每個字節      
         if(nChar == 0)        
         {             
           // 組內第一個字節,只是保存起來,待處理下一個字節時使用             
           nLeft = *pSrc;         
         }  
         else  
         {             
           // 組內其它字節,將其右邊部分與殘余數據相加,得到一個目標編碼字節             
           *pDst = (*pSrc << (8-nChar))   nLeft;             
           // 將該字節剩下的左邊部分,作為殘余數據保存起來             
           nLeft = *pSrc >> nChar;       
           // 修改目標串的指針和計數值 
           pDst++;             nDst++;          
         }             
         // 修改源串的指針和計數值         
         pSrc++; nSrc++;  
      }          
#endif     
      // 返回目標串長度     
      return nDst;  
}      


/*****************************************************************************************************
*             int gsmDecode7bit(const unsigned char* pSrc, char* pDst, int nSrcLength) 
*
* 7-bit解碼 
* pSrc: 源編碼串指針 
* pDst: 目標字符串指針 
* nSrcLength: 源編碼串長度 
* 返回: 目標字符串長度 
*******************************************************************************************************/
int gsmDecode7bit(const unsigned char* pSrc, char* pDst, int nSrcLength) 
{ 
     int nSrc;               // 源字符串的計數值     
     int nDst;               // 目標解碼串的計數值     
     int nByte;              // 當前正在處理的組內字節的序號,范圍是0-6     
     unsigned char nLeft;    // 上一字節殘余的數據        
#if 0     
     
     // 計數值初始化     
     nSrc = 0;     nDst = 0;    
     // 組內字節序號和殘余數據初始化     
     nByte = 0;     nLeft = 0;    
     // 將源數據每7個字節分為一組,解壓縮成8個字節     
     // 循環該處理過程,直至源數據被處理完     
     // 如果分組不到7字節,也能正確處理     
     while(nSrc<nSrcLength)     
     {         
       // 將源字節右邊部分與殘余數據相加,去掉最高位,得到一個目標解碼字節    
       *pDst = ((*pSrc << nByte)   nLeft) & 0x7f;         
       // 將該字節剩下的左邊部分,作為殘余數據保存起來         
        nLeft = *pSrc >> (7-nByte); 
       // 修改目標串的指針和計數值         
        pDst++;         nDst++;   
       // 修改字節計數值         
        nByte++;              
       // 到了一組的最后一個字節         
       if(nByte == 7)         
       {             
          // 額外得到一個目標解碼字節             
          *pDst = nLeft; 
          // 修改目標串的指針和計數值             
          pDst++;             nDst++; 
          // 組內字節序號和殘余數據初始化             
          nByte = 0;             
          nLeft = 0;         
       }              
       // 修改源串的指針和計數值         
       pSrc++;         
       nSrc++;     
     }          
     *pDst = 0;          
     // 返回目標串長度     
#endif     
     return nDst; 
} 

/***********************************************************************************************
     需要指出的是,7-bit的字符集與ANSI標準字符集不完全一致,在0x20以下也排布了一些可打印字符,但英文字母、
 阿拉伯數字和常用符號的位置 兩者是一樣的。用上面介紹的算法收發純英文短消息,一般情況應該是夠用了。
 如果是法語、德語、西班牙語等,含有 “?”、 “é”這一類字 符,則要按上面編碼的輸出去查表,請參閱GSM 03.38
 的規定。
***********************************************************************************************/



/************************************************************************************************
UCS2編碼是將每個字符(1-2個字節)按照ISO/IEC10646的規定,轉變為16位的Unicode寬字符。在Windows系統中,特
別是在2000/XP中,可以簡單地調用API 函數實現編碼和解碼。如果沒有系統的支持,比如用單片機控制手機模塊收
發短消息,只好用查表法解決了。
Windows 用C實現UCS2編碼和解碼的算法如下:
*************************************************************************************************/


/*************************************************************************************************
// UCS2編碼 
// pSrc: 源字符串指針 
// pDst: 目標編碼串指針 
// nSrcLength: 源字符串長度 
// 返回: 目標編碼串長度 
**************************************************************************************************/
int gsmEncodeUcs2(const char* pSrc, unsigned char* pDst, int nSrcLength) 
{  
      	   
	   int nDstLength;        // UNICODE寬字符數目     
	   WCHAR wchar[128];      // UNICODE串緩沖區          
#if 0	
	   // 字符串-->UNICODE串     
	   nDstLength = ::MultiByteToWideChar(CP_ACP, 0, pSrc, nSrcLength, wchar, 128);  
	  // 高低字節對調,輸出     
	  for(int i=0; i<nDstLength; i++)     
	  {         
	    // 先輸出高位字節
	    *pDst++ = wchar[i] >> 8;  
	    // 后輸出低位字節         
	    *pDst++ = wchar[i] & 0xff;     
	  }          
#endif	
	  // 返回目標編碼串長度     
	  return nDstLength * 2; 
}      


/**************************************************************************************************
// UCS2解碼 
// pSrc: 源編碼串指針 
// pDst: 目標字符串指針 
// nSrcLength: 源編碼串長度 
// 返回: 目標字符串長度 
**************************************************************************************************/
int gsmDecodeUcs2(const unsigned char* pSrc, char* pDst, int nSrcLength) 
{     
	 int nDstLength;        // UNICODE寬字符數目     
	 WCHAR wchar[128];      // UNICODE串緩沖區          
	 // 高低字節對調,拼成UNICODE     
	 for(int i=0; i<nSrcLength/2; i++)     
	 {         
	     // 先高位字節         
	     wchar[i] = *pSrc++ << 8;              
	     // 后低位字節         
	     wchar[i]  = *pSrc++;     
	 }          
	 // UNICODE串-->字符串     
	 nDstLength = ::WideCharToMultiByte(CP_ACP, 0, wchar, nSrcLength/2, pDst, 160, NULL, NULL);          
	 // 輸出字符串加個結束符         
	 pDst[nDstLength] = '\0';              
	 // 返回目標字符串長度     
	 return nDstLength; 
} 

/*************************************************************************************************
用以上編碼和解碼模塊,還不能將短消息字符串編碼為PDU串需要的格式,也不能直接將PDU串中的用戶信息解碼為
短消息字符串,因為還差一個在可打印字符串和字節數據之間相互轉換的環節。可以循環調用sscanf和sprintf函
數實現這種變換。下面提供不用這些函數的算法,它們也適用于單片機、DSP編程環境。
**************************************************************************************************/
// 可打印字符串轉換為字節數據 // 如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}
 // pSrc: 源字符串指針 
 // pDst: 目標數據指針 
 // nSrcLength: 源字符串長度 
 // 返回: 目標數據長度 
 int gsmString2Bytes(const char* pSrc, unsigned char* pDst, int nSrcLength) 
 {   
 	  for(int i=0; i<nSrcLength; i+=2)     
 	  {         
 	  	// 輸出高4位         
 	  	if(*pSrc>='0' && *pSrc<='9')         
 	  	{             
 	  		*pDst = (*pSrc - '0') << 4;         
 	        }         
 	        else         
 	        {             
 	        	*pDst = (*pSrc - 'A' + 10) << 4;         
 	        }              
 	        pSrc++;              
 	        // 輸出低4位        
 	        if(*pSrc>='0' && *pSrc<='9')         
 	        {             
 	        	*pDst  = *pSrc - '0';         
 	        }         
 	        else         
 	        {             
 	        	*pDst  = *pSrc - 'A' + 10;         
 	        }         
 	        pSrc++;         
 	        pDst++;     
 	  }          
 	  // 返回目標數據長度     
 	  returnnSrcLength / 2; 
 }      
 // 字節數據轉換為可打印字符串 // 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01"  
 // pSrc: 源數據指針 
 // pDst: 目標字符串指針 
 // nSrcLength: 源數據長度 
 // 返回: 目標字符串長度 
 int gsmBytes2String(const unsigned char* pSrc, char* pDst, int nSrcLength) 
 {     
 	const char tab[]="0123456789ABCDEF";    
 	// 0x0-0xf的字符查找表          
 	for(int i=0; i<nSrcLength; i++)     
 	{         
 		// 輸出低4位         
 		*pDst++ = tab[*pSrc >> 4];   
 	        // 輸出高4位         
 	        *pDst++ = tab[*pSrc & 0x0f];              
 	        pSrc++;     
 	}          
 	// 輸出字符串加個結束符     
 	*pDst = '\0';          
 	// 返回目標字符串長度     
 	return nSrcLength * 2; 
 }
 
/************************************************************************************************
*PDU全串的編碼和解碼過程,以及GSM 07.05的AT命令實現方法
*************************************************************************************************/
//用戶信息編碼方式 
#define GSM_7BIT        0 
#define GSM_8BIT        4 
#define GSM_UCS2        8      
// 短消息參數結構,編碼/解碼共用 
// 其中,字符串以0結尾 
typedef struct 
{     
	char SCA[16];       // 短消息服務中心號碼(SMSC地址)     
	char TPA[16];       // 目標號碼或回復號碼(TP-DA或TP-RA) 
	char TP_PID;        // 用戶信息協議標識(TP-PID)     
	char TP_DCS;        // 用戶信息編碼方式(TP-DCS)     
	char TP_SCTS[16];   // 服務時間戳字符串(TP_SCTS), 接收時用到     
	char TP_UD[161];    // 原始用戶信息(編碼前或解碼后的TP-UD)     
	char index;         // 短消息序號,在讀取時用到 
} SM_PARAM; 

/**************************************************************************************************
//PDU串中的號碼和時間,都是兩兩顛倒的字符串。利用下面兩個函數可進行正反變換:
// 正常順序的字符串轉換為兩兩顛倒的字符串,若長度為奇數,補''F''湊成偶數 // 如:"8613851872468" --> "683158812764F8" 
// pSrc: 源字符串指針 
// pDst: 目標字符串指針 
// nSrcLength: 源字符串長度 
// 返回: 目標字符串長度 
****************************************************************************************************/
int gsmInvertNumbers(const char* pSrc, char* pDst, int nSrcLength) 
{     
	int nDstLength;   // 目標字符串長度     
	char ch;          // 用于保存一個字符          
	// 復制串長度     
	nDstLength = nSrcLength;          
	// 兩兩顛倒     
	for(int i=0; i<nSrcLength;i+=2)     
	{         
	    ch = *pSrc++;        // 保存先出現的字符         
	    *pDst++ = *pSrc++;   // 復制后出現的字符         
	    *pDst++ = ch;        // 復制先出現的字符     
        }          
        // 源串長度是奇數嗎?     
        if(nSrcLength & 1)     
        {         
            *(pDst-2) = ''F'';     // 補''F'' 
            nDstLength++;        // 目標串長度加1     
        }          
        // 輸出字符串加個結束符     
        *pDst = ''\0'';          
        // 返回目標字符串長度     
        return nDstLength; 
}      
        
// 兩兩顛倒的字符串轉換為正常順序的字符串 // 如:"683158812764F8" --> "8613851872468" 
// pSrc: 源字符串指針 
// pDst: 目標字符串指針 
// nSrcLength: 源字符串長度 
// 返回: 目標字符串長度 
int gsmSerializeNumbers(const char* pSrc, char* pDst, int nSrcLength) 
{     
	int nDstLength;   // 目標字符串長度     
	char ch;          // 用于保存一個字符      
        // 復制串長度     nDstLength = nSrcLength;          
        // 兩兩顛倒     
        for(int i=0; i<nSrcLength;i+=2)     
        { 
                ch = *pSrc++;        
                // 保存先出現的字符         
                *pDst++ = *pSrc++;   // 復制后出現的字符         
                *pDst++ = ch;        // 復制先出現的字符     
        }          
       
        // 最后的字符是''F''嗎?     
        if(*(pDst-1) == ''F'')     
        {         
        	pDst--;         
        	nDstLength--;        // 目標字符串長度減1     
        }          
        // 輸出字符串加個結束符     
        *pDst = ''\0'';          
        // 返回目標字符串長度     
        return nDstLength; 
} 
        

//以下是PDU全串的編解碼模塊。為簡化編程,有些字段用了固定值。

// PDU編碼,用于編制、發送短消息 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一级大片网址| 久久综合久久综合九色| 99免费精品在线观看| 国产精品一区二区在线观看不卡 | 亚洲精品免费一二三区| 亚洲少妇屁股交4| 亚洲欧美韩国综合色| 悠悠色在线精品| 天堂午夜影视日韩欧美一区二区| 亚洲国产成人porn| 天天爽夜夜爽夜夜爽精品视频| 午夜不卡av在线| 久久电影网站中文字幕| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲国产cao| 亚洲美女淫视频| 丝袜美腿一区二区三区| 精品一区二区三区久久久| 国产一区二区三区蝌蚪| 99精品偷自拍| 欧美人成免费网站| 久久久91精品国产一区二区精品| 欧美激情一区二区三区四区| 2017欧美狠狠色| 国产精品国产精品国产专区不片| 亚洲综合在线五月| 久久精品噜噜噜成人av农村| 国产jizzjizz一区二区| 日本精品视频一区二区| 欧美成人一区二区三区| 国产精品天美传媒| 婷婷久久综合九色综合伊人色| 蜜臀av在线播放一区二区三区| 国产精品66部| 欧美日韩国产综合一区二区三区| 精品粉嫩超白一线天av| 亚洲黄色免费网站| 国产一区二区三区在线观看免费视频| 91美女蜜桃在线| 久久综合狠狠综合久久综合88 | 亚洲欧洲精品一区二区精品久久久 | 国产精品12区| 欧美高清视频不卡网| 国产精品乱码一区二三区小蝌蚪| 日日噜噜夜夜狠狠视频欧美人| 成人免费视频视频| 欧美sm极限捆绑bd| 亚洲一区二区三区三| 99视频一区二区三区| 日韩欧美视频在线| 亚洲国产精品久久一线不卡| 99视频一区二区| 国产午夜亚洲精品理论片色戒| 丝袜亚洲另类欧美| 在线观看日韩电影| 18成人在线视频| 成人免费毛片app| 久久综合久久鬼色| 美女视频网站久久| 91精品国产日韩91久久久久久| 日韩美女久久久| 不卡免费追剧大全电视剧网站| 精品噜噜噜噜久久久久久久久试看 | 激情六月婷婷综合| 9191久久久久久久久久久| 一区二区三区欧美视频| 成人一二三区视频| 亚洲少妇30p| 不卡的av电影在线观看| 欧美成人精品3d动漫h| 久久精品国产久精国产爱| 欧美绝品在线观看成人午夜影视| 一区二区三区四区av| 在线一区二区三区| 亚洲综合激情另类小说区| 色噜噜狠狠成人中文综合| 亚洲精品免费视频| 欧美亚洲国产一区二区三区va | 在线看一区二区| 亚洲在线成人精品| 欧美老人xxxx18| 秋霞av亚洲一区二区三| 日韩三级在线免费观看| 美国十次了思思久久精品导航| 日韩欧美电影一二三| 久久精品国产第一区二区三区| 91麻豆精品国产自产在线观看一区 | 日韩视频在线你懂得| 日本美女一区二区| 久久亚洲二区三区| 成人av动漫网站| 亚洲黄色尤物视频| 日韩午夜精品电影| 国产一区二区剧情av在线| 国产欧美日本一区视频| 在线观看网站黄不卡| 天堂成人国产精品一区| 精品美女一区二区三区| 99亚偷拍自图区亚洲| 亚洲综合色自拍一区| 日韩一二三区视频| 91在线播放网址| 日本欧美在线观看| 中文字幕免费观看一区| 欧美日韩国产一二三| 久久er精品视频| 亚洲视频 欧洲视频| 日韩精品一区二区三区四区| 成人午夜电影久久影院| 亚洲成a人在线观看| 精品久久一二三区| 97se亚洲国产综合在线| 奇米影视在线99精品| 国产精品大尺度| 欧美一区二区久久久| 97超碰欧美中文字幕| 久久综合综合久久综合| 一区二区三区在线视频免费 | 国产伦精一区二区三区| 国产精品久久久久久久久晋中 | 欧美日韩国产免费一区二区| 国产一区二区免费看| 亚洲欧美国产高清| 国产偷v国产偷v亚洲高清| 欧美日韩国产影片| 92精品国产成人观看免费| 国产精一品亚洲二区在线视频| 18欧美亚洲精品| 国产亚洲精品免费| 337p亚洲精品色噜噜狠狠| 99re视频这里只有精品| 国产夫妻精品视频| 美女久久久精品| 亚洲妇女屁股眼交7| 亚洲啪啪综合av一区二区三区| 亚洲精品一区在线观看| 91精品国产色综合久久不卡蜜臀| 91视频.com| 成人av小说网| 成人久久18免费网站麻豆| 精久久久久久久久久久| 婷婷激情综合网| 亚洲成人在线网站| 一区二区激情视频| 一区二区在线电影| 亚洲伊人伊色伊影伊综合网| 亚洲免费伊人电影| 日韩伦理av电影| 亚洲国产精品成人综合 | 福利一区二区在线| 国产白丝网站精品污在线入口| 激情综合色综合久久| 久久99久久99精品免视看婷婷 | 日韩和欧美的一区| 午夜婷婷国产麻豆精品| 三级成人在线视频| 免费欧美日韩国产三级电影| 蜜臀久久99精品久久久画质超高清| 亚洲第一福利视频在线| 午夜精品福利一区二区三区av | 亚洲线精品一区二区三区八戒| 亚洲一区二区三区四区的| 亚洲午夜久久久久| 午夜婷婷国产麻豆精品| 热久久久久久久| 韩国精品主播一区二区在线观看 | 亚洲免费毛片网站| 亚瑟在线精品视频| 免费久久精品视频| 国产露脸91国语对白| 成年人网站91| 日本高清无吗v一区| 欧美狂野另类xxxxoooo| 日韩一区二区三区三四区视频在线观看 | 日本欧美肥老太交大片| 国产一区欧美一区| 不卡av免费在线观看| 欧美三区在线观看| 亚洲精品在线观| 亚洲人成人一区二区在线观看| 亚洲v中文字幕| 国产成a人亚洲| 欧美日韩一区成人| 国产喷白浆一区二区三区| 亚洲国产一区视频| 国产成人自拍在线| 欧美日韩国产系列| 国产精品伦理在线| 蜜桃传媒麻豆第一区在线观看| 国产69精品久久99不卡| 欧美色区777第一页| 久久久久久久久97黄色工厂| 一区二区三区中文在线| 韩国毛片一区二区三区| 欧美亚洲综合色| 国产日韩欧美不卡在线| 免费久久精品视频| 欧洲激情一区二区| 国产精品久久午夜| 精品一区二区三区免费|