PDU的編碼器的工做原理是解碼器的逆過程。根據須要編碼器只須要編碼發送的PDU代碼,工做相對簡單。本文講解編碼思路,具體代碼請參考Blog中PDUEncoder部分編碼
我把PDU的編碼分爲兩部分,SMS和EMS。EMS部分我只提供了ConcatenatedShortMessage的編碼器。這是超長短信的編碼,用得最多。spa
SMS編碼設計
編碼一個SMS通常須要以下的信息:code
TP_Data_Coding_Scheme TP_UD編碼方式it
TP_Destination_Address 對方號碼io
TP_Message_Reference 參考號碼變量
TP_Status_Report_Request 狀態報告原理
TP_User_Data 用戶信息數據
TP_Validity_Priod 有效期英文
ServiceCenterNumber 短信中心號碼
因此在編碼器中存在以上的屬性,並在Set中加入了處理代碼,將可讀信息轉換成對應的十六進制信息。
特別注意的是TP_User_Data屬性,它能夠根據用戶數據編碼自動設置TP_UDL。對於純英文編碼,TP_UDL爲全部的字符數;對於Unicode編碼,因爲一個字符由兩個字節表示,TP_UDL爲全部的字符數*2。注意檢查TP_User_Data的長度,對於SMS來講編碼後的TP_UD長度不能超過140字節。也就是說英文160個字符(140/7*8),中文70個字符。
對於TP_UD的編碼在解碼器中也有說明,在此再也不贅述。
我還設計了幾個枚舉變量:
ENUM_TP_DCS 編碼方式
ENUM_TP_SRI 狀態報告
ENUM_TP_VALID_PERIOD 有效期
ENUM_TP_VPF 有效期格式
這些枚舉變量能夠簡化輸入,也利於往後擴充。
當以上內容設置好之後,基本上一個短信的架子就出來了。此時調用GetSMSPDUCode進行組合,簡單的把十六進制拼接起來就造成了一個完整的PDU代碼。
轉自bbs.sendsms.cn