我正在开发一个支持PDU格式(使用Android手机)发送消息的消息服务器。我使用在线编码器来转换我的文本,但我不知道将文本转换为PDU格式的实际步骤我不认为它只是一个十六进制数字。
我使用命令从超级终端发送消息。
有人可以帮忙吗?
我使用了AT-Commands:
at
at+cmgf=0
at+cmgs=25 (Length i guess)
>"encoded message"
答案 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 再次,努力寻找高质量的产品。