2010-08-28 36 views
1

我正在編寫基於所有ETSI GSM文檔處理SMS PDU的代碼。有一件事我需要問一下。 PDU包含用戶數據長度字段,然後是用戶數據。根據GSM 03.40,UDL字段是使用未壓縮GSM缺省字母表時的用戶數據的七位字節數。但是,它也表示,當數據被壓縮時,UDL是用戶數據的八位字節數。SMS PDU和用戶數據長度

參見引號:

如果TP用戶數據使用 GSM 7位默認字母編碼,則TP 用戶數據長度字段給出內的七重峯的數目 的 整數表示TP用戶數據 字段。

[...]

如果TP用戶數據使用 壓縮GSM 7位默認字母表 或壓縮8位數據或壓縮 UCS2 [24]的數據,該TP用戶數據 長度字段編碼給出一個整數 表示在TP User 數據字段後面的八位字節數 後面的數字字段。

的問題是,當7位數據進行壓縮和壓縮用戶數據的字節數是7的倍數,你不知道在最後一個字節的最後7位是否填寫位或一個真實的角色。即打開壓縮時,7個字節可能包含7個或8個7位字符。而當UDL字段是八位字節數時,你怎麼知道這7個字節是否包含7或8個字符?如果UDL包含septets的數量,那麼一切都會很清楚,對吧?那麼我是否誤解了文檔,或者它是否真的以這種方式工作?

任何人都可以請解釋我是如何工作的嗎?提前致謝!

回答

1

所以,我誤解了Data Coding Scheme字節中壓縮位的含義。我認爲它提到了7位字母打包方法(其中至少一個字符存儲在一個字節內),但它指的是霍夫曼壓縮。

因此,上面的問題有點愚蠢。對不起:-)。

2

正如您已經知道的那樣,創建MMS消息需要您在文本消息之前添加UDH。 UDH成爲您的有效載荷的一部分,從而減少了您可以發送的每個段的字符數。

由於它已成爲您的有效載荷的一部分,它需要確認您的有效載荷數據要求 - 這是7位。然而,UDH是8位,這顯然使事情複雜化。

考慮的UDH以下作爲一個例子(它是一個級聯消息的UDH):

050003000302 
  • 05是UDH(隨後的5個八位字節)
  • 00的長度是IEI
  • 03是IEDL(3更多個八位字節)
  • 00是基準(這個數目必須在每個級聯消息UDH的相同)
  • 03是消息的最大數量
  • 02是當前消息編號。

這是總共6個八位字節 - 相當於48位。這一切都很好,但由於UDH實際上是SMS消息的一部分,因此您需要做的是添加更多位,以便實際消息從七個邊界開始。一個七位邊界是每7位,所以在這種情況下,我們將不得不再增加1位數據來使UDH爲49位,然後我們可以添加標準的GSM-7編碼字符。

您可以從Here更多瞭解此信息