0

我尝试在 PDU 模式下读取多部分短信。消息分为 3 部分

下面是我使用命令 AT+CMGF=0 和 AT+CMGL=4 得到的 PDU

Part1:07914150740250F7440B917130263521F600005140723295528AA005 C01B5B0301 B2E53C194D46A3C96834196D169BD16833DA8C368BCD62B3D82C368BCD62B3586C169BC566B1596C169BC562B3D82C368BCD62B3D82C368BCD62B3DBEC769BDD66B7D90D328B41663768DC0699DD66B7D96D769BDD66B7D96D76BBCD6EB3DBEC36BBCD6EB3DBEC36BBCD6EF7D96D769BDD67F7D96D769FDD67B7FBEC3EBBCFEEB3DB7D769FDD

Part2:07912160130320F8440B917130263521F600005140723295528AA005 C01B5B0302 CE6EB3DBEC56AB41D9729E8C26A3D164349A8C368BCD68B4196D469BC566B1596C169BC566B1592C368BCD62B3D82C368BCD62B1596C169BC566B1596C169BC566B1D96D76BBCD6EB3DBEC0699C520B31B346E83CC6EB3DBEC36BBCD6EB3DBEC36BBDD66B7D96D769BDD66B7D96D769BDD66B7FBEC36BBCDEEB3FBEC36BBCFEEB3DB7D769FDD

第3部分:07914140540500F9440B917130263521F600005140723295528A1805 C01B5B0303 CEEEB3DB7D769FDD67B7D96D76ABD5

*根据我的理解,为了确定它是否是多部分消息,我必须检查 TP-UDHI 是否设置在第一个八位字节的第六位。在这种情况下,它没有设置。

*PDU 的粗体部分是数据头

*我想为了表明这是一个连接消息,它必须是 00 而不是 C0?

如果我弄错了请纠正我..

问题1:为什么在这种情况下没有设置TP-UDHI第一个八位位组是07?

问题2:为什么UDH的第一个八位字节不是00而是C0?

4

1 回答 1

0

好的,回答问题 1)您错过了在 PDU 的开头发现 SMSC 地址的地方。所以实际上您的 PDU 标头八位字节是 44。这表明 PDU 中存在 UDH。

这是 SMSC 地址:

07914150740250F7

紧随其后的是 PDU 报头 44。

关于问题 2) 事情变得有点复杂。现在我没有发现 UDH 包含任何连接 SMS 的指示。不要忘记 UDH 不仅仅用于连接消息。它可以包含许多基于 3GPP ETSI 规范 03.40 的其他信息。

仔细观察后,看起来 SMS 在发送端被奇怪地编码,或者移动运营商与 UDH 搞混了。您正确地将 UDH 隔离为:

C01B5B0302

根据之前的字节,UDH 长度应为 5 个字节。但是第一个 IEI(信息元素)具有误导性。C0 将 IEI 定义为 SC 特定的 IEI,而不是串联的 IEI。然后下一个 1B 说 IEI 数据应该是 27 字节长,这与 UDH 长度 5 相矛盾。

所以从我的角度来看,有些东西破坏了 UDH(这可能发生在移动运营商、短信聚合器,甚至是糟糕的编码器上)。

如果您想尝试删除 C01B 并替换为 0003 以确保 8 位 concat 引用:

00035b0301
00035B0302
00035B0303

然后你会得到一个 UDH,告诉你 MR 是 91 并且正确指定了零件。

于 2015-05-02T13:21:47.713 回答