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

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

?? sms短信編、解碼.c

?? 很完整的SMS短信編、解碼程序代碼!!希望對需要的人有所幫助
?? C
?? 第 1 頁 / 共 2 頁
字號:
    for(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 i,nDstLength;   // 目標字符串長度
    char ch;          // 用于保存一個字符
    // 復制串長度
    nDstLength = nSrcLength;
    // 兩兩顛倒
    for(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編碼,用于編制、發送短消息
// pSrc: 源PDU參數指針
// pDst: 目標PDU串指針
// 返回: 目標PDU串長度
**************************************************************************************/
/*int gsmEncodePdu(const SM_PARAM* pSrc, char* pDst)
{
    int nLength;             // 內部用的串長度
    int nDstLength;          // 目標PDU串長度
    unsigned char buf[256];  // 內部用的緩沖區
    
    // SMSC地址信息段
    nLength = strlen(pSrc->SCA);    // SMSC地址字符串的長度    
    buf[0] = (char)((nLength & 1) == 0 ? nLength : nLength + 1) / 2 + 1;    // SMSC地址信息長度
    buf[1] = 0x91;        // 固定: 用國際格式號碼
    nDstLength = gsmBytes2String(buf, pDst, 2);        // 轉換2個字節到目標PDU串
    nDstLength += gsmInvertNumbers(pSrc->SCA, &pDst[nDstLength], nLength);    // 轉換SMSC到目標PDU串
    
    // TPDU段基本參數、目標地址等
    nLength = strlen(pSrc->TPA);    // TP-DA地址字符串的長度
    buf[0] = 0x11;            // 是發送短信(TP-MTI=01),TP-VP用相對格式(TP-VPF=10)
    buf[1] = 0;               // TP-MR=0
    buf[2] = (char)nLength;   // 目標地址數字個數(TP-DA地址字符串真實長度)
    buf[3] = 0x91;            // 固定: 用國際格式號碼
    nDstLength += gsmBytes2String(buf, &pDst[nDstLength], 4);  // 轉換4個字節到目標PDU串
    nDstLength += gsmInvertNumbers(pSrc->TPA, &pDst[nDstLength], nLength); // 轉換TP-DA到目標PDU串
    
    // TPDU段協議標識、編碼方式、用戶信息等
    nLength = strlen(pSrc->TP_UD);    // 用戶信息字符串的長度
    buf[0] = pSrc->TP_PID;        // 協議標識(TP-PID)
    buf[1] = pSrc->TP_DCS;        // 用戶信息編碼方式(TP-DCS)
    buf[2] = 0;            // 有效期(TP-VP)為5分鐘
    if(pSrc->TP_DCS == GSM_7BIT)    
    {
        // 7-bit編碼方式
        buf[3] = nLength;            // 編碼前長度
        nLength = gsmEncode7bit(pSrc->TP_UD, &buf[4], nLength+1) + 4;    // 轉換TP-DA到目標PDU串
    }
    else if(pSrc->TP_DCS == GSM_UCS2)
    {
        // UCS2編碼方式
        buf[3] = gsmEncodeUcs2(pSrc->TP_UD, &buf[4], nLength);    // 轉換TP-DA到目標PDU串
        nLength = buf[3] + 4;        // nLength等于該段數據長度
    }
    else
    {
        // 8-bit編碼方式
        buf[3] = gsmEncode8bit(pSrc->TP_UD, &buf[4], nLength);    // 轉換TP-DA到目標PDU串
        nLength = buf[3] + 4;        // nLength等于該段數據長度
    }
    nDstLength += gsmBytes2String(buf, &pDst[nDstLength], nLength);        // 轉換該段數據到目標PDU串
    // 返回目標字符串長度
    return nDstLength;
}*/
/****************************************************************************************
// PDU解碼,用于接收、閱讀短消息
// pSrc: 源PDU串指針
// pDst: 目標PDU參數指針
// 返回: 用戶信息串長度
*****************************************************************************************/
int gsmDecodePdu(const char* pSrc, SM_PARAM* pDst)
{
    int nDstLength;          						// 目標PDU串長度
    unsigned char tmp;      						// 內部用的臨時字節變量
    unsigned char buf[256];  						// 內部用的緩沖區
    // SMSC地址信息段
    /*gsmString2Bytes(pSrc, &tmp, 2);    				// 取長度
    tmp = (tmp - 1) * 2;    						// SMSC號碼串長度
    pSrc += 4;              						// 指針后移
    gsmSerializeNumbers(pSrc, pDst->SCA, tmp);    	// 轉換SMSC號碼到目標PDU串
    pSrc += tmp;        // 指針后移
    // TPDU段基本參數、回復地址等
    gsmString2Bytes(pSrc, &tmp, 2);    // 取基本參數
    pSrc += 2;        // 指針后移
    if(tmp & 0x80)
    {
        // 包含回復地址,取回復地址信息
        gsmString2Bytes(pSrc, &tmp, 2);    				// 取長度
        if(tmp & 1) tmp += 1;    						// 調整奇偶性
        pSrc += 4;          // 指針后移
        gsmSerializeNumbers(pSrc, pDst->TPA, tmp);    	// 取TP-RA號碼
        pSrc += tmp;        // 指針后移
    }
    // TPDU段協議標識、編碼方式、用戶信息等
    gsmString2Bytes(pSrc, (unsigned char*)&pDst->TP_PID, 2);        // 取協議標識(TP-PID)
    pSrc += 2;        // 指針后移
    gsmString2Bytes(pSrc, (unsigned char*)&pDst->TP_DCS, 2);        // 取編碼方式(TP-DCS)
    pSrc += 2;        // 指針后移
    gsmSerializeNumbers(pSrc, pDst->TP_SCTS, 14);                   // 服務時間戳字符串(TP_SCTS) 
    pSrc += 14;       // 指針后移
    gsmString2Bytes(pSrc, &tmp, 2);                                 // 用戶信息長度(TP-UDL)
    pSrc += 2;        // 指針后移
    if(pDst->TP_DCS == GSM_7BIT)
    {
        // 7-bit解碼
        nDstLength = gsmString2Bytes(pSrc, buf, tmp & 7 ? (int)tmp * 7 / 4 + 2 : (int)tmp * 7 / 4);  // 格式轉換
        gsmDecode7bit(buf, pDst->TP_UD, nDstLength);                // 轉換到TP-DU
        nDstLength = tmp;
    }
    else if(pDst->TP_DCS == GSM_UCS2)
    {*/
        // UCS2解碼
        //nDstLength = gsmString2Bytes(pSrc, buf, tmp * 2);            // 格式轉換
       // nDstLength = gsmDecodeUcs2(buf, pDst->TP_UD, nDstLength);   // 轉換到TP-DU
   /* }
    else
    {
        // 8-bit解碼
        //nDstLength = gsmString2Bytes(pSrc, buf, tmp * 2);            // 格式轉換
        //nDstLength = gsmDecode8bit(buf, pDst->TP_UD, nDstLength);    // 轉換到TP-DU
    }
    // 返回目標字符串長度
    return nDstLength;*/
}
/**********************************************************************************************************************
//依照GSM 07.05,發送短消息用AT+CMGS命令,閱讀短消息用AT+CMGR命令,列出短消息用AT+CMGL命令,刪除短消息用AT+CMGD命令。但AT+CMGL命令能夠讀出所有的短消息,所以我們用它實現閱讀短消息功能,而沒用AT+CMGR。下面是發送、讀取和刪除短消息的實現代碼:
// 發送短消息
// pSrc: 源PDU參數指針
**********************************************************************************************************************/
/*BOOL gsmSendMessage(const SM_PARAM* pSrc)
{
    int nPduLength;        // PDU串長度
    unsigned char nSmscLength;    // SMSC串長度
    int nLength;           // 串口收到的數據長度
    char cmd[16];          // 命令串
    char pdu[512];         // PDU串
    char ans[128];         // 應答串
    
    nPduLength = gsmEncodePdu(pSrc, pdu);    // 根據PDU參數,編碼PDU串
    strcat(pdu, "\x01a");        // 以Ctrl-Z結束
    
    gsmString2Bytes(pdu, &nSmscLength, 2);    // 取PDU串中的SMSC信息長度
    nSmscLength++;        // 加上長度字節本身
    
    // 命令中的長度,不包括SMSC信息長度,以數據字節計
    sprintf(cmd, "AT+CMGS=%d\r", nPduLength / 2 - nSmscLength);    // 生成命令
    
    WriteComm(cmd, strlen(cmd));    // 先輸出命令串
    
    nLength = ReadComm(ans, 128);   // 讀應答數據
    
    // 根據能否找到"\r\n> "決定成功與否
    if(nLength == 4 && strncmp(ans, "\r\n> ", 4) == 0)
    {
        WriteComm(pdu, strlen(pdu));        // 得到肯定回答,繼續輸出PDU串
    
        nLength = ReadComm(ans, 128);       // 讀應答數據
    
        // 根據能否找到"+CMS ERROR"決定成功與否
        if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
        {
            return TRUE;
        }
    }
    
    return FALSE;
}*/
/****************************************************************************************
// 讀取短消息
// 用+CMGL代替+CMGR,可一次性讀出全部短消息
// pMsg: 短消息緩沖區,必須足夠大
// 返回: 短消息條數
****************************************************************************************/
/*int gsmReadMessage(SM_PARAM* pMsg)
{
    int nLength;        // 串口收到的數據長度
    int nMsg;           // 短消息計數值
    char* ptr;          // 內部用的數據指針
    char cmd[16];       // 命令串
    char ans[1024];     // 應答串
    
    nMsg = 0;
    ptr = ans;

    sprintf(cmd, "AT+CMGL\r");    // 生成命令
    
    WriteComm(cmd, strlen(cmd));    // 輸出命令串
    nLength = ReadComm(ans, 1024);    // 讀應答數據
    // 根據能否找到"+CMS ERROR"決定成功與否
    if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
    {
        // 循環讀取每一條短消息, 以"+CMGL:"開頭
        while((ptr = strstr(ptr, "+CMGL:")) != NULL)
        {
            ptr += 6;        // 跳過"+CMGL:"
            sscanf(ptr, "%d", &pMsg->index);    // 讀取序號
            TRACE("  index=%d\n",pMsg->index);
    
            ptr = strstr(ptr, "\r\n");    // 找下一行
            ptr += 2;        // 跳過"\r\n"
                
            gsmDecodePdu(ptr, pMsg);    // PDU串解碼
            pMsg++;        // 準備讀下一條短消息
            nMsg++;        // 短消息計數加1
        }
    }
    
    return nMsg;
}
    
// 刪除短消息
// index: 短消息序號,從1開始
BOOL gsmDeleteMessage(const int index)
{
    int nLength;          // 串口收到的數據長度
    char cmd[16];         // 命令串
    char ans[128];        // 應答串
    sprintf(cmd, "AT+CMGD=%d\r", index);    // 生成命令
    // 輸出命令串
    WriteComm(cmd, strlen(cmd));
    // 讀應答數據
    nLength = ReadComm(ans, 128);
    // 根據能否找到"+CMS ERROR"決定成功與否
    if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
    {
        return TRUE;
    }
    return FALSE;
}*/
//以上發送AT命令過程中用到了WriteComm和ReadComm函數,它們是用來讀寫串口的,依賴于具體的操作系統。在Windows環境下,除了用MSComm控件,以及某些現成的串口通信類之外,也可以簡單地調用一些Windows API用實現。以下是利用API實現的主要代碼,注意我們用的是超時控制的同步(阻塞)模式。
// 串口設備句柄
//HANDLE hComm;
    
// 打開串口
// pPort: 串口名稱或設備路徑,可用"COM1"或"\\.\COM1"兩種方式,建議用后者
// nBaudRate: 波特率
// nParity: 奇偶校驗
// nByteSize: 數據字節寬度
// nStopBits: 停止位
/*BOOL OpenComm(const char* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
{
    DCB dcb;        // 串口控制塊
    COMMTIMEOUTS timeouts = {    // 串口超時控制參數
        100,        // 讀字符間隔超時時間: 100 ms
        1,          // 讀操作時每字符的時間: 1 ms (n個字符總共為n ms)
        500,        // 基本的(額外的)讀超時時間: 500 ms
        1,          // 寫操作時每字符的時間: 1 ms (n個字符總共為n ms)
        100};       // 基本的(額外的)寫超時時間: 100 ms
    
    hComm = CreateFile(pPort,    // 串口名稱或設備路徑
            GENERIC_READ | GENERIC_WRITE,    // 讀寫方式
            0,               // 共享方式:獨占
            NULL,            // 默認的安全描述符
            OPEN_EXISTING,   // 創建方式
            0,               // 不需設置文件屬性
            NULL);           // 不需參照模板文件
    
    if(hComm == INVALID_HANDLE_VALUE) return FALSE;        // 打開串口失敗
    
    GetCommState(hComm, &dcb);        // 取DCB
    
    dcb.BaudRate = nBaudRate;
    dcb.ByteSize = nByteSize;
    dcb.Parity = nParity;
    dcb.StopBits = nStopBits;
    
    SetCommState(hComm, &dcb);        // 設置DCB
    
    SetupComm(hComm, 4096, 1024);     // 設置輸入輸出緩沖區大小
    
    SetCommTimeouts(hComm, &timeouts);    // 設置超時
    
    return TRUE;
}
    
// 關閉串口
BOOL CloseComm()
{
    return CloseHandle(hComm);
}
    
// 寫串口
// pData: 待寫的數據緩沖區指針
// nLength: 待寫的數據長度
void WriteComm(void* pData, int nLength)
{
    DWORD dwNumWrite;    // 串口發出的數據長度
    
    WriteFile(hComm, pData, (DWORD)nLength, &dwNumWrite, NULL);
}
    
// 讀串口
// pData: 待讀的數據緩沖區指針
// nLength: 待讀的最大數據長度
// 返回: 實際讀入的數據長度
int ReadComm(void* pData, int nLength)
{
    DWORD dwNumRead;    // 串口收到的數據長度
    
    ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
    
    return (int)dwNumRead;
}*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产自产在线观看一区| 欧美成人综合网站| 最新国产の精品合集bt伙计| 国产成人精品1024| 久久久亚洲国产美女国产盗摄| 毛片一区二区三区| 日韩欧美另类在线| 久久精品国产精品亚洲精品| 欧美一级电影网站| 久久精品国产免费| 亚洲精品一线二线三线| 国产乱人伦偷精品视频免下载 | 成人免费毛片a| 欧美国产精品v| 99久久国产综合色|国产精品| 国产精品久久久久永久免费观看| 成人动漫一区二区| 国产精品久久精品日日| 92精品国产成人观看免费| 亚洲日本一区二区三区| 91年精品国产| 亚洲国产成人tv| 日韩一区和二区| 国内精品视频一区二区三区八戒 | 欧美麻豆精品久久久久久| 午夜影院久久久| 日韩久久精品一区| 国产精品123| 综合在线观看色| 欧美三级在线看| 看片网站欧美日韩| 中文字幕av免费专区久久| 色婷婷av一区二区三区软件| 亚洲综合免费观看高清完整版| 亚洲三级理论片| 欧美亚洲国产一区在线观看网站| 婷婷久久综合九色综合绿巨人| 日韩午夜精品电影| 大美女一区二区三区| 亚洲精品v日韩精品| 51午夜精品国产| 国产成人精品免费在线| 一区二区三区在线免费播放| 欧美日韩国产一区二区三区地区| 美女视频免费一区| 国产精品美女久久久久久久 | 精品视频免费看| 免费看欧美女人艹b| 久久午夜老司机| 91国内精品野花午夜精品| 日产精品久久久久久久性色| 国产色产综合色产在线视频| 日本韩国视频一区二区| 美女一区二区久久| 国产精品视频第一区| 欧美日韩精品欧美日韩精品一| 激情都市一区二区| 一区二区欧美在线观看| 精品国产91乱码一区二区三区| 菠萝蜜视频在线观看一区| 亚洲va欧美va国产va天堂影院| 精品国产一区二区三区av性色| 91在线视频官网| 麻豆视频一区二区| 亚洲精品视频自拍| 日韩欧美国产精品一区| 91在线观看污| 另类的小说在线视频另类成人小视频在线| 国产精品色哟哟网站| 欧美一三区三区四区免费在线看 | 久久精品72免费观看| 中文字幕亚洲综合久久菠萝蜜| 欧美一区二区三区在线| 99精品视频在线观看免费| 老司机精品视频线观看86| 亚洲三级电影网站| 久久嫩草精品久久久精品一| 欧美三级视频在线播放| 国产成人免费视频网站高清观看视频| 亚洲图片欧美视频| 中文字幕一区二区三区四区| 欧美一二三四区在线| 在线精品亚洲一区二区不卡| 国产高清在线精品| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲精品综合在线| 中文无字幕一区二区三区 | 国产精品久久久久影院亚瑟| 日韩美女一区二区三区| 亚洲桃色在线一区| 久久蜜桃一区二区| 成人欧美一区二区三区小说| 色又黄又爽网站www久久| 国产精品77777竹菊影视小说| 日韩激情一二三区| 亚洲一区视频在线| 中文字幕一区二区三中文字幕| 久久先锋影音av鲁色资源网| 欧美丰满一区二区免费视频| 91免费在线视频观看| 国产精品亚洲第一区在线暖暖韩国| 性做久久久久久久久| 国产盗摄精品一区二区三区在线| 久久这里只精品最新地址| 777奇米四色成人影色区| 在线亚洲欧美专区二区| 97久久精品人人爽人人爽蜜臀| 岛国精品在线播放| 国产精品性做久久久久久| 久久国产三级精品| 麻豆一区二区在线| 蜜臀av在线播放一区二区三区| 午夜视频在线观看一区二区三区| 伊人婷婷欧美激情| 亚洲另类中文字| 亚洲欧美偷拍三级| 亚洲人成小说网站色在线| 中文字幕一区在线观看| 欧美国产欧美综合| 欧美国产精品中文字幕| 亚洲国产精品av| 国产欧美1区2区3区| 久久久精品免费网站| 国产亚洲一区二区在线观看| 精品盗摄一区二区三区| 亚洲精品一区二区三区影院 | 亚洲精品久久7777| 一区二区三区不卡视频| 一区二区免费看| 亚洲午夜一区二区| 五月天视频一区| 奇米精品一区二区三区四区| 日韩电影在线免费| 久久99久久精品| 国产乱一区二区| 粉嫩av亚洲一区二区图片| 国产成人鲁色资源国产91色综| 丰满少妇在线播放bd日韩电影| 国产不卡在线视频| jiyouzz国产精品久久| 色哟哟国产精品| 欧美日韩一区在线| 欧美精品第1页| 欧美mv和日韩mv国产网站| 久久奇米777| 中文字幕一区二区三区av| 亚洲美女淫视频| 天天做天天摸天天爽国产一区| 日本不卡一二三| 国产一区二区毛片| 成人ar影院免费观看视频| 99免费精品视频| 欧美日韩国产中文| 精品99一区二区三区| 国产色一区二区| 亚洲黄色免费网站| 日本最新不卡在线| 国产一区二区三区观看| aaa亚洲精品一二三区| 在线观看日韩高清av| 亚洲精选视频在线| 性感美女极品91精品| 九九精品视频在线看| 丁香啪啪综合成人亚洲小说 | 99re亚洲国产精品| 欧美蜜桃一区二区三区| 欧美不卡123| 亚洲视频一区二区在线| 视频精品一区二区| 天天色综合天天| 国产成人精品www牛牛影视| 日本韩国一区二区三区| 日韩欧美中文字幕制服| 国产精品久久久久久一区二区三区 | 欧美日韩的一区二区| 精品理论电影在线观看 | 亚洲精品免费播放| 日韩电影免费一区| 成人永久看片免费视频天堂| 欧美专区在线观看一区| 337p日本欧洲亚洲大胆色噜噜| 中文字幕在线不卡一区 | 首页国产欧美久久| 国产91精品一区二区麻豆网站 | 欧美国产一区二区在线观看| 亚洲一区二区视频在线| 国产精品影视在线| 欧美影视一区在线| 久久在线观看免费| 亚洲成人午夜电影| 成人小视频在线观看| 在线综合亚洲欧美在线视频| 国产精品午夜免费| 蜜臀va亚洲va欧美va天堂 | 日韩精品一区二区三区视频播放| 国产精品网站一区| 蜜桃av一区二区| 在线影院国内精品| 国产午夜亚洲精品羞羞网站| 亚洲国产精品嫩草影院|