好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

短信格式sms以及编码总结.doc

5页
  • 卖家[上传人]:枫**
  • 文档编号:381244089
  • 上传时间:2023-12-11
  • 文档格式:DOC
  • 文档大小:221.51KB
  • / 5 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 短信格式(sms)以及编码总结 一、短信猫操作分为三种模式: Block、Pdu 和 Text1、Block 模式基本已经被 Pdu 模式取代,没有具体研究2、Text 模式比较简单,但是支持的设备不是很全,而且不能实现中文AT + CGMF=1AT + CGMS= “ ” ,129 >Hello World!<^Z>3、Pdu 模式Pdu 编码主要包括两个主要的部分,一是 pdu 串的整体数据格式,分别因为发送信息串和接收信息串而有区别,二是 pdu 中文本部分的编码,分别因为字符集而不同我们也可以这样来理解这个 pdu 编码的格式, sms 相当于一个协议栈,最简单的协议栈:根据 gsm03.40 规范, sms 协议包括以下几层:1、 SM-AL :应用层这个部分就是数据部分2、 SM-TL :传输层我们可以清楚的看到这里描述了主要的短信内容,包括发送号码,接收号码,信息类型,编码,数据报长度等等,这也是我们编程主要要面对的问题3、 SM-RL :中继层这个指的是短信在网关之间中继需要的协议4、 SM-LL:链路层从上述描述中我们可以清楚的看到,我们编程主要集中于传输层。

      二、短信传送有三种编码: 7 位, 8 位, UniCode1、英文 7 位编码这是 gsm 的默认编码方式由于这样的移位,我们可以看到我们能发的最多英文字符等于: 140*8/7 = 160 2、数据 8 位编码 8-bit 编码通常用于发送数据消息,比如图片和铃声等;3、中文 pdu 编码 发送中文时,必须用 UCS2 ( utf-16 )进行编码,最多可以发 140/2 = 70 个汉字UniCode 编码转换也比较简单,以中文为例,一个中文字符是两个字节,直接对高位字节和低位字节进行十六进制转换就可以了如“欢迎”, UniCode 编码是 6B22 8FCE ,这同时也就是转换的结果,如果发送的串中有英文字符,那么在前面补全 00 ,以保证一个字符对应两个字节4、PDU 串的用户信息 (TP-UD) 段最大容量是 140 字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是 160 、 140 和 70 这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符三、地址编码短信发送中都会涉及到短信地址的问题,他们的编码规则是一致的 , 简单来说就是 BCD8421码编码。

      如: 08 91 6808501505F0 ,08 :地址长度,(号码类型 + 号码长度) /2 的十六进制表示91 :号码类型683108501505F四、编码示例1、发送信息的 PDU 串:“ Hello World! ”通过执行 AT + CMGL=2 可以读出此条信息AT+CMGL=2 {读未发短信息} +CMGL: 1,2,,24 {1表示信息个数,2表示未发信息,24表示信息总容量} 08 91 683108501505F0 11 00 0B 81 3106656930F1 0000FF 0B E8329BFD06DDDF723619 OK 下面分析这条信息: 2、接收信息的 PDU 串读取以上发送出来的短信,可以收到如下信息 , “欢迎”PDU 串为: 08 91 683108503705F0 04 0D 91 683106504562F7 00 08 30507080635400 046B228FCE对以上的 PDU 串分析如下表:五、接收短消息一般有两种接收模式 1 .AT+CNMI=2,1,0,0,0 接受并存到 SIM 串口接收到以下信息: +CMTI:"SM",X AT+CMGR=X回车   (从X存储区读短消息) AT+CMGD=X回车  05/02/28附录:关于PDU模式发送短信:第一,对模块写入 AT+CMGF=0<回车>   的AT命令(<回车> 要用 \r 来实现),之后应该得到一个 OK 响应,才能继续进行下一步;第二,对模块写入 AT+CMGS=<回车>   的AT命令(其中 是一个数字,该数字是代表了PDU串中某一部分的长度,这一部分就是指除了SMSC地址之外的那一部分),之后应该得到一个 \r\n> \r\n   响应(特别要注意:\r是回车,\n是换行,>是一个大于号,>后面还有一个空格!),才能继续进行下一步;第三,可以开始写入要发送的内容了。

      这一部分只是PDU串中的一部分,并不是完整的PDU串(如前所述,去掉了SMSC地址那一部分),这一部分要以 Ctrl+Z 结尾,但是我们要知道,在字符串中要带上 Ctrl+Z 的话,必须是用ACSII码Ctrl+Z的ASCII码是16进制的 1A ,所以你可以在你的字符串后面用strcat函数附加上 "\x1A " 来实现这样之后,如果发送成功,你就会收到GSM模块的一个发送成功的响应,形如:          +CMGS: 246          OK如果只有一个“OK”响应,没有类似于“+CMGS: 246”的部分,则并不能发送成功!所以,当你只收到一个 OK 响应的时候,那肯定是哪里出错了。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.