簡訊PDU編碼解碼)

來源:互聯網
上載者:User

 有兩種方式,一有簡訊網關,二是通過SMS的DTE-DCE介面標準(AT命令集)。我們來討論一下At命令傳送簡訊,下面是在Siemens M75驗證。

        一共有三種方式來發送和接收SMS資訊:Block Mode, Text Mode和PDU Mode。其中PDU Mode被所有手機支援,可以使用任何字元集,這也是手機預設的編碼方式。其中又分7bit-160,8bit-140,16bit-70的方式,我們中文用16bit70的方式。

        在Text Mode下,發送及接收到的資料均以ASCII碼的形式來表示。在PDU Mode下,簡訊息本文經過十六進位編碼後被傳送。PDU相當於一個資料包,它由構成訊息(SMS)的資訊組成。作為一種資料單元,它必須包含源/目的地址、保護(有效)時間、資料格式、協議類型和本文,本文長度可達140位元組,它們都以十六進位表示。PDU結構根據短訊息由移動終端發起或以移動終端為目的而不同。每條訊息可以發送140個位元組,由於本系統中最長的資料串沒有超過140個位元組,因此資料均可以用一條訊息來發送。

        現舉例說明短訊息的發送與接收(以Text Mode為例)
        (1)設定短訊息中心
AT+CSCA="+8613800100500" (短訊息中心號碼)
        (2)設定短訊息發送格式
AT+CMGF=1 (1-TEXT; 0-PDU)
        (3)發送短訊息(短訊息內容為“ABCD”)
AT+CMGS="13694121067" (目的地址)
> ABCD ^z
        (4)設定新短訊息到達提示
AT+CNMI=1,1,0,0,1()
當短訊息到達時,模組將自動發出提示指令: +CMTI:"SM",INDEX(資訊儲存位置)
        (5)讀取短訊息內容,假設INDEX=8。
AT+CMGR=8
返回資訊如下:
+CMGR: "REC READ","+8613694121067","04/05/31,11:21:18+00"
HELLO
        (6)刪除短訊息
AT+CMGD=INDEX
        考慮到GSM傳輸存在時延問題,與衛星傳輸方式一樣,雙方的資料收發均只採用自報方式。即:終端站採用定時自報方式主動向後台中心發射資料,後台中心被動接收;當後台中心需要終端站當前的資料或需要對終端站參數進行設定時,後台中心只向該終端站發射相應的命令包,終端站收到該命令時,根據不同的命令以自報方式發送後台中心所要資料或修改相應的參數。

        下面討論PDU方式的編碼方式:

例1 發送:SMSC號碼是+8613800250500,對方號碼是13851872468,訊息內容是“Hello!”。從手機發出的PDU串可以是

08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 58 81 27 64 F8 00 00 00 06 C8 32 9B FD 0E 01
對照規範,具體分析: 
08
 SMSC地址資訊的長度
 共8個八位位元組(包括91)
 
91
 SMSC地址格式(TON/NPI)
 用國際格式號碼(在前面加‘+’)
 
68 31 08 20 05 05 F0
 SMSC地址
 8613800250500,補‘F’湊成偶數個
 
11
 基本參數(TP-MTI/VFP)
 發送,TP-VP用相對格式
 
00
 訊息基準值(TP-MR)
 0
 
0D
 目標地址數字個數
 共13個十進位數(不包括91和‘F’)
 
91
 目標地址格式(TON/NPI)
 用國際格式號碼(在前面加‘+’)
 
68 31 58 81 27 64 F8
 目標地址(TP-DA)
 8613851872468,補‘F’湊成偶數個,BCD編碼方式,低位-高位方式
 
00
 協議標識(TP-PID)
 是普通GSM類型,點到點方式
 
00
 使用者資訊編碼方式(TP-DCS)
 7-bit編碼
 
00
 有效期間(TP-VP)
 5分鐘
 
06
 使用者資訊長度(TP-UDL)
 實際長度6個位元組
 
C8 32 9B FD 0E 01
 使用者資訊(TP-UD)
 “Hello!”

 

0891683108100005F0 31 00 0B 81 3129503323F1 00 08 A8 0C 4F6060F3776189C94E865427

分析一下
分段
 含義
 說明
 
08
 SMSC地址資訊的長度
 共8個八位位元組(包括91)
 
91
 SMSC地址格式(TON/NPI)
 用國際格式號碼(在前面加‘+’),81表示沒有+
 
683108100005F0
 SMSC地址
 8613800100500,補‘F’湊成偶數個bcd編碼
31
 基本參數(TP-MTI/VFP)
 發送,TP-VP用相對格式。標誌
 
00
 訊息基準值(TP-MR)
 0
 
0D
 目標地址數字個數
 共13個十進位數(不包括91和‘F’)
 
81
 目標地址格式(TON/NPI)
 用國際格式號碼(在前面加‘+’),81表示沒有‘+’
 
3129503323F1
 目標地址(TP-DA)
 8613851872468,補‘F’湊成偶數個,BCD編碼方式,低位-高位方式
 
00
 協議標識(TP-PID)
 是普通GSM類型,點到點方式
 
08
 使用者資訊編碼方式(TP-DCS)
 16-bit編碼,UCS2編碼
 
A8
 有效期間(TP-VP)
 2天
 
0C
 使用者資訊長度(TP-UDL)
 實際長度12個位元組
 
4F6060F3776189C94E865427
 使用者資訊(TP-UD)
 “你睡覺了吧!”

        在PDU Mode中,可以採用三種編碼方式來對發送的內容進行編碼,它們是7-bit、8-bit和UCS2(16bit)編碼。7-bit編碼用於發送普通的 ASCII字元,它將一串7-bit的字元(最高位為0)編碼成8-bit的資料,每8個字元可“壓縮”成7個;8-bit編碼通常用於發送資料訊息,比片和鈴聲等;而UCS2編碼用於發送Unicode字元。在這三種編碼方式下,PDU串的使用者資訊(TP-UD)段最大容量(可以發送的短訊息的最大字元數)分別是160、140和70。這裡,將一個英文字母、一個漢字和一個資料位元組都視為一個字元。
Unicode字元編碼解碼如下

// UCS2編碼

// 輸入: pSrc - 源字串指標

//       nSrcLength - 源字串長度

// 輸出: pDst - 目標編碼串指標

// 返回: 目標編碼串長度

int gsmEncodeUcs2(const char* pSrc, unsigned char* pDst, int nSrcLength)

{

     int nDstLength;        // UNICODE寬字元數目

     WCHAR wchar[128];  // UNICODE串緩衝區

 

     // 字串-->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;       // 後輸出低位位元組

     }

 

     // 返回目標編碼串長度

     return nDstLength * 2;

}

 

// UCS2解碼

// 輸入: pSrc - 源編碼串指標

//       nSrcLength -  源編碼串長度

// 輸出: pDst -  目標字串指標

// 返回: 目標字串長度

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;

}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.