1

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

见引文:

如果使用 GSM 7 位默认字母表对 TP 用户数据进行编码,则 TP 用户数据长度字段给出 TP 用户数据字段中要遵循的 septets 数量的整数表示。

[...]

如果 TP 用户数据使用压缩的 GSM 7 位默认字母表或压缩的 8 位数据或压缩的 UCS2 [24] 数据进行编码,则 TP 用户数据长度字段给出 TP 用户数据字段内压缩后八位字节数的整数表示跟随。

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

谁能解释一下它是如何工作的?提前致谢!

4

2 回答 2

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 边界开始。每 7 位有一个 septet 边界,因此在这种情况下,我们必须再添加 1 位数据以使 UDH 为 49 位,然后我们可以添加我们的标准 GSM-7 编码字符。

你可以从这里阅读更多关于这个的信息

于 2013-02-25T07:12:30.270 回答
1

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

因此,上面的问题有点愚蠢。对此感到抱歉:-)。

于 2010-08-31T16:46:19.837 回答