SMS PDU和用户数据长度

时间:2010-08-28 15:48:56

标签: sms gsm pdu

我正在编写基于所有ETSI GSM文档处理SMS PDU的代码。我需要问一件事。 PDU包含用户数据长度字段,后跟用户数据。根据GSM 03.40,UDL字段是当使用未压缩的GSM默认字母表时用户数据的septets的数量。但是,它还说,当数据被压缩时,UDL就是用户数据的八位字节数。

参见引号:

  

如果使用TP编码TP用户数据   GSM 7位默认字母表,TP   用户数据长度字段给出   整数表示的数字   TP用户数据中的septets   要跟随的领域。

     

[...]

     

如果TP用户数据使用编码   压缩的GSM 7位默认字母表   或压缩的8位数据或压缩   UCS2 [24]数据,TP用户数据   长度字段给出整数   表示八位字节的数量   在TP用户内压缩之后   要遵循的数据字段。

问题在于,当压缩7位数据并且压缩用户数据的八位字节数是7的倍数时,您不知道最后一个八位字节中的最后7位是填充位还是真正的性格。即压缩打开时,7个八位字节可能包含7或8个7位字符。当UDL字段是八位字节的数量时,你怎么知道这7个八位字节是否包含7或8个字符?如果UDL包含septets的数量,一切都会很清楚,对吧?那么我误解了文档还是真的以这种方式工作?

有人可以解释一下它是如何运作的吗?提前谢谢!

2 个答案:

答案 0 :(得分:2)

如您所知,创建彩信需要您在短信之前添加UDH。 UDH成为有效负载的一部分,从而减少了每个段可以发送的字符数。

由于它已成为您的有效负载的一部分,因此需要确认您的有效负载数据要求 - 即7位。然而,UDH是8位,这显然使事情变得复杂。

以下面的UDH为例(它是串联消息的UDH):

050003000302
  • 05是UDH的长度(后面的5个八位字节)
  • 00是IEI
  • 03是IEDL(3个以上的八位字节)
  • 00是一个引用(这个数字在每个连接的消息UDH中必须相同)
  • 03是最大消息数
  • 02是当前的消息编号。

这总共是6个八位字节 - 相当于48位。这一切都很好,但由于UDH实际上是SMS消息的一部分,您需要做的是添加更多位,以便实际消息在septet边界上开始。 septet边界是每7位,所以在这种情况下,我们将需要再添加1位数据以使UDH为49位,然后我们可以添加标准的GSM-7编码字符。

您可以从Here

了解更多相关信息

答案 1 :(得分:1)

所以,问题在于我误解了数据编码方案字节中压缩位的含义。我认为它提到了7位字母表打包方法(其中至少有一个字符存储在一个字节内),但它指的是霍夫曼压缩。

因此,上面的问题有点愚蠢。对不起: - )。