将文本转换为PDU格式

时间:2015-10-21 05:09:51

标签: c# sms at-command hyperterminal pdu

我正在开发一个支持PDU格式(使用Android手机)发送消息的消息服务器。我使用在线编码器来转换我的文本,但我不知道将文本转换为PDU格式的实际步骤我不认为它只是一个十六进制数字。

我使用命令从超级终端发送消息。

有人可以帮忙吗?

我使用了AT-Commands:

    at
    at+cmgf=0
    at+cmgs=25 (Length i guess)
    >"encoded message"

1 个答案:

答案 0 :(得分:1)

AT+CMGS命令在3GPP 25.005 standard中定义,对于PDU模式,其语法为

+CMGS=<length><CR>
PDU is given<ctrl-Z/ESC>

并在说明书中进一步说明

  

PDU应为十六进制格式(类似于<pdu>所指定的)   并在一行中给出; ME / TA将此编码转换为实际编码   PDU的八位字节。

<pdu>格式在3.1参数定义的消息数据参数中定义:

  

在SMS的情况下:3GPP TS 24.011 [6] SC地址后跟   3GPP TS 23.040 [3]十六进制格式的TPDU:ME / TA转换每个   TP数据单元的八位字节分为两个IRA字符长十六进制数   (例如,具有整数值42的八位字节作为两个字符呈现给TE   2A(IRA 50和65))

(SC是服务中心的缩写)

这里所有的乐趣都开始了,因为你现在必须真正地,非常地,深入地挖掘其他规范来揭示实际的格式...

例如,24.011描述了在移动设备和网络之间发送的消息的低级数据格式,其中只有部分信息在此上下文中相关。

  

7.3.1.2 RP-DATA(移动台到网络)该消息在MS中发送 - &gt; MSC方向。该消息用于中继TPDU。该   信息元素符合3GPP TS 23.040。

在给出的表格中,最后两行是相关部分,即服务中心地址和TPDU。

Information element, Reference, Presence, Format, Length
RP‑Message Type, Subclause 8.2.2, M, V, 3 bits
RP‑Message Reference, Subclause 8.2.3, M, V, 1 octet
RP‑Originator Address, Subclause 8.2.5.1, M, LV, 1 octet
RP‑Destination Address, Subclause 8.2.5.2, M, LV, 1‑12 octets
RP‑User Data, Subclause 8.2.5.3, M, LV, <= 233 octets

试图进一步挖掘我一直试图弄清楚RP-Destination地址编号IEI的值,我已经花了很长时间写这个答案。抱歉停在这里。实际的电话号码编码是&#34;正常&#34;被叫方BCD号码编码(24.48中为10.5.4.7)和TON + NPI与<type>中的AT+CPBW参数相同。文本的编码就是一个完整的故事......

尝试破译3GPP规范的某些部分有时会非常困难,误解的可能性可能接近无穷无尽!如果您真的打算开发自己的代码来做到这一点,那么开始阅读好的PDU模式介绍可能会更好 http://mobiletidings.com/2009/02/11/more-on-the-sms-pdu/ 1 。 或者在已经存在的处理PDU模式 2 的库/程序中查找代码。

1 请注意,如果文本中没有提及3GPP标准中通常为低质量指标的详细/技术术语,那么这类优质文章就会介入。

2 再次,努力寻找高质量的产品。