有关于短信解码的一些问题...........................

asd5252005   2009-3-8 17:57 楼主
本人用的是ANYDATA的DTGS800模块,如果别人向我发一条长短信(长度大于140字节),这时,运营商会分成多条短信然后送到我的终端。
当我收到短信时,发现在短信内容的前面都被加了一些特殊的数据来标记该条短信。。比如说以下的这条短信
+CMGR: 00000420,15980324358,,2009/03/07/18:07,0,[0500031b0202]4f60547554759...
中括号的部分是运营商帮我加进去的,我不知道该怎么识别出来,这条短信是中文短信,我还可以猜测得出来,
[0500031b0202],前面的05应该表示用户数据头有5个字节,然后剩下的5个字节都是用户数据的头部,并不是真正的用户数据,真正的用户数据应该在这6个字节之后

但是长英文短信我就真的是没辙了,例如下面的
+CMGR: 00000220,15980324358,,2009/03/07/18:11,0,[024000030b001004]36182d4661446268325a0c5643055061365b6d56
这是我收到一条长英文短信的第二部分,不知道怎么解析出来,因为我不知道用户数据头部有多长,中括号的部分是我自己觉得的,也不知道究竟对不对,
但这样解析出来的短信是错误的.还有就是我需要用7位编码方式来解析这条短信吗?请各位同道赐教...

回复评论 (11)

同志们。。帮忙顶顶吧。
点赞  2009-3-8 21:17
没有搞过PDU格式的!
点赞  2009-3-8 23:01
呵呵。。谢谢帮顶
点赞  2009-3-9 08:18
我弄过 PDU格式的  但我 没有搞过 长短信,分条 发送 识别起来 是比较麻烦的,我好像 记得 里面应该 有个字节是表示“这是第几条”!
点赞  2009-3-9 09:36
引用: 引用 4 楼 peng5522 的回复:
我弄过 PDU格式的  但我 没有搞过 长短信,分条 发送 识别起来 是比较麻烦的,我好像 记得 里面应该 有个字节是表示“这是第几条”!


兄弟啊,麻烦讲清楚点?终于看到一个有做过类似的工作的。。
点赞  2009-3-9 10:44
不好意思啊  LZ ,因为 我们 涉及的 短信 都是 短的,所以  当时 只是 稍微 了解 了下 长短信,并没有 去具体 研究。你去 网上 搜索 “分段短信” 应该 能找到 些 有帮助的 东东。
点赞  2009-3-9 13:31
GSM 03.40 TP-User-Data(TP-UD)有讲长短信.
点赞  2009-3-9 15:16
以前找的,看是否对你有帮助:
超长短信的处理办法 GSM 03.40规范(TP-06 1999-12-15 7.4.0)中规定了SME对于超长短信的合并处理。规范制定至今,已经超过6年,绝大多数正在使用的手机,都支持这一功能。
?
CMPP协议中,CMPP_SUBMIT_MESSAGE中有两个字段pk_total和pk_numer,恰看起来,这就是发送超长短信的设置参数,其实不然,这两个参数的设置,应该是没有用处。
?
发送超长短信,需要做两件事情:设置TP_udhi的值设置为1,在消息正文中增加协议头。协议后可以两种格式,分别是长度为6和长度为7的协议头。格式如下:
6位协议头格式:05 00 03 XX MM NN
byte 1 : 05, 表示剩余协议头的长度
byte 2 : 00, 这个值在GSM 03.40规范9.2.3.24.1中规定,表示随后的这批超长短信的标识位长度为1(格式中的XX值)。
byte 3 : 03, 这个值表示剩下短信标识的长度
byte 4 : XX,这批短信的唯一标志,事实上,SME(手机或者SP)把消息合并完之后,就重新记录,所以这个标志是否唯一并不是很重要。
byte 5 : MM, 这批短信的数量。如果一个超长短信总共5条,这里的值就是5。
byte 6 : NN, 这批短信的数量。如果当前短信是这批短信中的第一条的值是1,第二条的值是2。
例如:05 00 03 39 02 01
?
7位的协议头格式:06 08 04 XX XX MM NN
byte 1 : 06, 表示剩余协议头的长度
byte 2 : 08, 这个值在GSM 03.40规范9.2.3.24.1中规定,表示随后的这批超长短信的标识位长度为2(格式中的XX值)。
byte 3 : 04, 这个值表示剩下短信标识的长度
byte 4-5 : XX XX,这批短信的唯一标志,事实上,SME(手机或者SP)把消息合并完之后,就重新记录,所以这个标志是否唯一并不是很重要。
byte 6 : MM, 这批短信的数量。如果一个超长短信总共5条,这里的值就是5。
byte 7 : NN, 这批短信的数量。如果当前短信是这批短信中的第一条的值是1,第二条的值是2。
例如:06 08 04 00 39 02 01
?
7位协议头和6位协议头的区别是,6位协议头短信的标识字段是1个byte,而7位协议头短信的标志字段为2个byte。大多手机采用6位的协议头,也就是05 00 03 XX MM NN。
?
发送的短信这么处理,接受短信反过来就可以了。上述内容,在CMPP协议以及多款手机上经过测试验证。
点赞  2009-3-9 15:20
哇,楼上的真厉害,正好我也可以借鉴一下
点赞  2009-3-9 17:03
引用: 引用 8 楼 liuxu2559 的回复:
以前找的,看是否对你有帮助:
超长短信的处理办法 GSM 03.40规范(TP-06 1999-12-15 7.4.0)中规定了SME对于超长短信的合并处理。规范制定至今,已经超过6年,绝大多数正在使用的手机,都支持这一功能。
?
CMPP协议中,CMPP_SUBMIT_MESSAGE中有两个字段pk_total和pk_numer,恰看起来,这就是发送超长短信的设置参数,其实不然,这两个参数的设置,应该是没有用处。
?
发送超长短信,需要做两件事情:设置TP_udhi的值设…


呵呵。谢谢这位兄弟了,这个是GSM方面的,在长中文短信方面和CDMA的好像一样,但是和CDMA的长英文短信似乎不同??
点赞  2009-3-10 12:51
算了,结贴。
点赞  2009-3-15 18:39
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复