PDU的編碼--EMS編碼

編碼EMS較SMS複雜,但每條EMS的基礎仍是SMS,因此我直接繼承了 SMS類。區別主要是要處理好TP_UD和IE。對於ConcatenatedShortMessage,因爲其IE和TP_UDHL佔據了TP_UD的 部分空間,因此每條短信英文只能容納133字符,中文66字符。咱們能夠經過此信息獲得短信條數。數組

若是TP_DCS爲Unicode編碼,則短信條目爲:編碼

TotalMessages= (TP_UD.Length / 4) / 66 + ((TP_UD.Length / 4 Mod 66) = 0)+1spa

若是爲7bit,則爲:code

TotalMessages= (tp_ud.Length / 266) - ((tp_ud.Length Mod 266) = 0)+1繼承

注意在程序中我爲了簡化之後的數組操做,就沒有加一。string

肯定了短信條數之後經過一個循環就能夠提取出每條短信的TP_UD。it

SelectCase tp_dcs基礎

CaseENUM_TP_DCS.UCS2ftp

tmpTP_UD= Mid(TP_UD, i * 66 * 4 + 1, 66 * 4)'When TP_UDL is odd, the max length of anUnicode string in PDU code is 66 Charactor.See [3GPP TS 23.040 V6.5.0 (2004-09]9.2.3.24.1擴展

CaseENUM_TP_DCS.DefaultAlphabet

tmpTP_UD= Mid(tp_ud, i * 133 * 2 + 1, 133 * 2)

EndSelect

此後還須要編碼IE部分,關鍵代碼是肯定TP_UDL的值。對於TP_DCS爲7bit來講肯定此值顯得比較複雜,弄很差容易出現多一個少一個的錯誤。

Iftp_dcs = ENUM_TP_DCS.UCS2 Then

TP_UDL= tmpTP_UD.Length / 2 + 6 + 1 '6: length of IE

End If

Iftp_dcs = ENUM_TP_DCS.DefaultAlphabet Then

TP_UDL= Fix((tmpTP_UD.Length + 7 * 2) * 4 / 7) '6:length of IE

End If

而後根據3GPP裏關於EMS的結構的說明就能夠編寫出EMS PDU的處理程序。詳見原代碼。

若是須要擴展EMS以適應更多種類的EMS,能夠參考3GPP寫出更爲強大的編碼程序。但最關鍵的仍是須要處理好IE以及TP_UDL。

轉自bbs.sendsms.cn

相關文章
相關標籤/搜索