加载中…
个人资料
爱上电路设计
爱上电路设计
  • 博客等级:
  • 博客积分:0
  • 博客访问:243,316
  • 关注人气:59
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

GSM/GPRS之三-短信格式及编码

(2016-09-21 15:08:23)
标签:

短信格式及编码

分类: 通信、网络、密码安全

目录:

概述

短信传输

一、短信猫操作分为三种模式: Block、PDU  Text

二、短信传送有三种编码: 位, 位, UniCode

三、地址编码

四、编码示例

1、发送信息的 PDU 串
2、接收信息的PDU串

五、接收短消息

附录

附录一:关于PDU模式发送短信

附录二:SIM卡中UCS2编码的三种格式(80,81,82)分析


------------------------------------------------------------------------------------------------

概述

短信开发指通过串口 at 命令驱动短信猫进行短信发送和接收操作。

GSM/GPRS之三-短信格式及编码

AT 命令 驱动短信设备的标准工业命令,除了业界的标准之外,每个厂商可能会对其进行扩展,不过一般来说,标准命令应该够用,我在这里用的是西门子 MC39i ,有专门的 AT 命令文档。


------------------------------------------------------------------------------------------------

短信传输

一、短信猫操作分为三种模式: Block、PDU  Text

1Block 模式基本已经被 PDU 模式取代,没有具体研究。

------------------------

2Text 模式比较简单,但是支持的设备不是很全,而且不能实现中文。

AT + CGMF=1

AT + CGMS= “ 13612344321 ” ,129 >Hello World!<^Z>

------------------------

3PDU 模式

PDU 编码主要包括两个主要的部分,一是 PDU 串的整体数据格式,分别因为发送信息串和接收信息串而有区别,二是 PDU 中文本部分的编码,分别因为字符集而不同。

我们也可以这样来理解这个 PDU 编码的格式, SMS 相当于一个协议栈,最简单的协议栈。

------------------------

4、根据 GSM03.40 规范, SMS 协议包括以下几层:

1)SM-AL :应用层。这个部分就是数据部分。

2SM-TL 传输层。我们可以清楚的看到这里描述了主要的短信内容,包括发送号码,接收号码,信息类型,编码,数据报长度等等,这也是我们编程主要要面对的问题。

3) SM-RL :中继层。这个指的是短信在网关之间中继需要的协议。

4) SM-LL:链路层。

从上述描述中我们可以清楚的看到,我们编程主要集中于传输层

------------------------------------------------

二、短信传送有三种编码: 位, 位, UniCode

1、英文 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 :号码类型

683108501505F0 :号码,实际号码应为: +8613805515500 ,号码处理方法为 , 如果为 +86 开始 ,  + 号去掉 , 然后判断是否为偶数 , 不是在末尾补 F, 然后将奇数位和偶数位互换

------------------------------------------------

四、编码示例

1、发送信息的 PDU 串

用手机写一条短信息,发送手机号码为 13605696031 ,信息内容为“ 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

下面分析这条信息:

08

短信息中心地址长度。(短信息中心号码类型 短信息中心号码长度 /2 的十六进制表示)

91

短信息中心号码类型, 91 是 TON/NPI 。 TON/NPI 遵守 International/E.164 标准,指在号码前需加‘+’号 此外还可有其他数值,但 91 最常用。

683108501505F0

短信息中心号码,是所使用的服务中心地址。由于位置上略有处理,实际号码应为: 8613805515500( 字母 意指长度减 1), 这是作者所在地 GSM 短信息中心的号码。 ( 号码处理方法为 如果为 +86 开始 将 号去掉 然后判断是否为偶数 ,不是在末尾补 F, 然后将奇数位和偶数位互换 )

11

文件头字节 (header byte, 是一种 bitmask) 。这里 11 指正常地发送短信息。

00

信息参考号。( TP-MR 

0B

被叫号码长度。被叫号码长度的十六进制表示。

81

被叫号码类型。

3106656930F1

被叫号码,也经过了移位处理,实际号码为 13605696031。

00

协议标识 (TP-PID),是普通 GSM 类型,点到点方式

00

用户信息编码方式 (TP-DCS), 7-bit 编码( 08 : UCS2 编码)

FF

有效期 (TP-VP),短信的有效时间

0B

短信息长度

E8329BFD06DDDF723619

短信息内容“Hello World!”。 7-bit 编码

------------------------

2、接收信息的PDU串

   读取以上发送出来的短信,可以收到如下信息 ,

   接受到来自 13600554267 的“欢迎”PDU 串为:

08 91 683108503705F0 04 0D 91 683106504562F7 0008 30507080635400 046B228FCE

对以上的 PDU 串分析如下表

含义

说明

08

SMSC 地址信息的长度

共 8 个八位字节 ( 包括 91)

91

SMSC 地址格式

 (TON/NPI)

用国际格式号码 ( 在前面加 ‘+’)

683108503705F 0

SMSC 地址

8613800573500 ,补 ‘F’ 凑成偶数个

04

基本参数

 (TP-MTI/MMS/RP)

接收,无更多消息,有回复地址,如果为 00 ,就没有以下关于回复地址的三个段

0D

回复地址数字个数

共 13 个十进制数 ( 不包括 91 和 ‘F’)

91

回复地址格式 (TON/NPI)

用国际格式号码 ( 在前面加 ‘+’)

683106504562F 7

回复地址 (TP-RA)

8613600554267 ,补 ‘F’ 凑成偶数个

00

协议标识 (TP-PID)

是普通 GSM 类型,点到点方式

08

用户信息编码方式 (TP-DCS)

UCS2 编码(即中文)

30507080635400

时间戳 (TP-SCTS)

2003-5-7 08:36:45 +8 时区

04

用户信息长度 (TP-UDL)

实际长度4个字节

6B228FCE

用户信息 (TP-UD)

“ 欢迎 !” UCS2 编 故unicode码为6B22 8FCE

 

GSM/GPRS之三-短信格式及编码

------------------------------------------------

五、接收短消息

一般有两种接收模式

1 .AT+CNMI=2,1,0,0,0 接受并存到SIM串口接收到以下信息: +CMTI:"SM",*

  AT+CMGR=* 回车(从*存储区读短消息) 

  AT+CMGD=* 回车(从*存储区删除短消息)

 

PDU状态:AT+CMGF=0 OK+CMTI: "SM",1 

AT+CMGR=1 +CMGR: 0,,24

0891683108501705F0240D91683157805300F50000502082000281000462F11804 OK

文本状态: +CMGR: "REC READ","+86 13750835005",,"05/02/28,0:20:18+00" bbc  OK

------------------------

2 .AT+CNMI=2,2,0,0,0 并直接到串口串口接到以下信息

+CMT: "+8613501154105",,"01/09/13,11:04:09+32" AAA


------------------------------------------------------------------------------------------------

附录

附录一:关于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 响应的时候,那肯定是哪里出错了。

------------------------------------------------

附录二:SIM卡中UCS2编码的三种格式(80,81,82)分析

 操作SIM卡中的数据操作主要有两个地方,一个是短信操作,还有一个通讯录操作,两种编码略有差别:

1、短信息操作:

    在短信息中,默认一条短信的最大长度为140个字节。

    纯ASCII字符主要采用7-bit编码格式,即只是利用了字符的后7位数据,这样160个ASCII字符只占用140个字节。这样我们手机的一条短信就可以发送160个ASCII字符了。

    包含汉字的字符采用UCS2编码格式,即UNICODE的2字节编码格式。样每个字符占用两个字节,只要短信中包含中文,整条短信的字符都要采用UCS2编码,这样整个短信最多就只能发送70个字符了。

------------------------

2、通讯录操作:

    通讯录中的姓名长度限制不一样,本人使用的TD模块限制长度为14个字节。

    单独的ASCII字符正常都使用8-bit编码格式,即每个字节都占用8位,这也是最为正常的存储格式了。

    如果包含中文等字符,则正常采用80编码格式,即整个姓名字符以80开头,后面跟上UCS2数据,但有些情况下又会采用81或者82开头。

  a) 80 开头:

    80开头的为ucs2格式(注意:后面的字符必须有中文才行,否则可能是以80开头的纯ASCII字符串),大头在前,小头在后。

    例1:中国

    UNICODE编码为:4E2D56FD

    用ucs2的80方案表示是:804E2D56FD

    例2:杜10娘

    UNICODE编码为:675C003100305A18

    用ucs2的80方案表示是:80675C003100305A18

    显然只要有中文,数字也得占用两个字节。

   b) 81 开头:

     81开头的格式中,包含一个基址(一个字节)。有这个基址,就可以用一个字节表示一个ucs2字符了。

     在格式上,81是标识,后一个字节表示整个字符串长度,再后面一个字节是基址,再往后的就都是数据了。先举一例:

     例3:杜杜杜

     UNICODE编码为:675C675C675C

     用ucs2的80方案表示是:80675C675C675C

     用ucs2的81方案表示是:8103CEDCDCDC

     分析一下UCS2的81方案:8103CEDCDCDC

     81:为标记

     03:表示整个字符串为3个字符

     CE:一个字节为基址。解析的方法为:将基址(CE)左移七位,并将最高位置为0,最低位再补一个0(这样就16位啦)。此时基

     址变为0x6700,然后再判断后面的数据字节。

     DCDCDC:3个数据字节 DC, DC, DC 。如果数据字节的最高位为0,则认为此字节是一个ASCII字符。如果数据字节的最高位为

     1,则低7位为基址的一个偏移,实际的UCS2字符为基址加上这个偏移值。由于此处三个数据字节最高位都为1,则实际的3个字符的

     偏移值为:5C, 5C, 5C。实际的UCS2编码为: 0x675C 0x675C 0x675C, 此处我们就看的明白了。

     例4:一丁丂七丄丅               (注:这些字符属于GBK字符集)

     UNICODE编码为:4E004E014E024E034E044E05

     用ucs2的80方案表示是:804E004E014E024E034E044E05

     用ucs2的81方案表示是:81069C808182838485

     分析一下UCS2的81方案:81069C808182838485

     81:为标记

     06:表示整个字符串为6个字符

     9C:一个字节为基址。解析的方法为:将基址(9C)左移七位,并将最高位置为0,最低位再补一个0(这样就16位啦)。此时基址

     变为0x4E00,然后再判断后面的数据字节。

     808182838485:6个数据字节 80,81,82,83,84,85 。由于此处六个数据字节最高位都为1,则实际的6个字符的偏移值为:00, 

     01,02,03,04,05。实际的UCS2编码为:0x4E00,0x4E01,0x4E02,0x4E03,0x4E04,0x4E05。 OK。

   c) 82 开头:

     82开头的格式中,包含一个基址(两个字节)。有这个基址,就可以用一个字节表示一个ucs2字符了。

     在格式上,81是标识,后一个字节表示整个字符串长度,再后面两个字节是基址,再往后的就都是数据了。先举一例:

     例5:8025EF芳

     UNICODE编码为:00380030003200350045004682B3

     用ucs2的80方案表示是:8000380030003200350045004682B3

     用ucs2的81方案表示是:因为格式的限制,最多容纳128个中文和127个英文,所以此处无法用81格式表示)

     用ucs2的82方案表示是:82078280383032354546B3

     分析一下UCS2的82方案:82078280383032354546B3

     82:为标记

     07:表示整个字符串为7个字符

     8280:两个字节为基址。

     383032354546B3:7个数据字节 38,30,32,35,45,46,B3。如果数据字节的最高位为0,则认为此字节是一个ASCII字符。如果

     数据字节的最高位为1,低7位为基址的一个偏移,实际的UCS2字符为基址加上这个偏移值。由于此处七个数据字节的前六个字节最高

     位为0,所以表示6个ASCII字符0x38,0x30,0x32,0x35,0x45,即8025EF。第七个字节的最高位为1,则此数据的

     偏移值为0x33,需要加上基址 0x8280,UCS2编码为0x82B3(

     例6:杜杜1

     UNICODE编码为:675C675C0031

     用ucs2的80方案表示是:80675C675C0031

     用ucs2的81方案表示是:8103CEDCDC31

     用ucs2的82方案表示是:82036700DCDC31

     分析一下UCS2的82方案:82036700DCDC31

     82:为标记

     03:表示整个字符串为6个字符

     6700两个字节为基址。

     DCDC31:36个数据字节 DC,DC,31。由于此处三个字节的前两个字节最高位为1,则此数据的偏移值为0x5C,需要加上基址

     0x6700,UCS2编码为:0x675C()。第三个字节的最高位为0,所以表示一个ASCII字符:0x31,即 1 

     此处只是稍微分析了一下UCS2三种格式(80,81,82)的解码,想必知道了各个字段的含义,编码也就轻松多了。

==============================================================

短信pdu详细解析见GSM/GPRS之短信pdu详细解析

手机短信的PDU编码和解码

 

共有三种方式来发送和接收SMS信息:Block Mode, Text Mode和PDU Mode。其中PDU Mode被所有手机支持,可以使用任何字符集,这也是手机默认的编码方式。

发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。在这三种编码方式下,PDU串的用户信息(TP-UD)段最大容量(可以发送的短消息的最大字符数)分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。
PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短消息的字符数的两倍。如果用户信息(TP-UD)中存在一个头(基本参数的TP-UDHI为1),在所有编码方式下,用户信息长度(TP-UDL)都等于头长度与编码后字节数之和。如果采用GSM 03.42所建议的压缩算法(TP-DCS的高3位为001),则该长度也是压缩编码后字节数或头长度与压缩编码后字节数之和。 

PDU相当于一个数据包,它由构成消息(SMS)的信息组成。作为一种数据单元,它必须包含源/目的地址、保护(有效)时间、数据格式、协议类型和正文,正文长度可达140字节,它们都以十六进制表示。PDU结构根据短消息由移动终端发起或以移动终端为目的而不同。每条消息可以发送140个字节,由于本系统中最长的数据串没有超过140个字节,因此数据均可以用一条消息来发送。
一般的PDU编码由A B C D E F G H I J K L M十三项组成。
A:短信息中心地址长度,2位十六进制数(1字节)。
B:短信息中心号码类型,2位十六进制数。
C:短信息中心号码,B+C的长度将由A中的数据决定。
D:文件头字节,2位十六进制数。 
E:信息类型,2位十六进制数。
F:被叫号码长度,2位十六进制数。
G:被叫号码类型,2位十六进制数,取值同B。
H:被叫号码,长度由F中的数据决定。
I:协议标识,2位十六进制数。
J:数据编码方案,2位十六进制数。
K:有效期,2位十六进制数。
L:用户数据长度,2位十六进制数。
M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。
PDU编码协议简单说明
例1 发送:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“Hello!”。从手机发出的PDU串可以是
08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 96 03 29 30 F0 00 00 00 06 C8 32 9B FD 0E 01
对照规范,具体分析:
分段 含义 说明
08 SMSC地址信息的长度 共8个八位字节(包括91)
91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 08 20 05 05 F0 SMSC地址 8613800250500,补‘F’凑成偶数个
11 基本参数(TP-MTI/VFP) 发送,TP-VP用相对格式
00 消息基准值(TP-MR) 0
0D 目标地址数字个数 共13个十进制数(不包括91和‘F’)
91 目标地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 96 03 29 30 F0 目标地址(TP-DA) 8613693092030,补‘F’凑成偶数个
00 协议标识(TP-PID) 是普通GSM类型,点到点方式
00 用户信息编码方式(TP-DCS) 7-bit编码
00 有效期(TP-VP) 5分钟
06 用户信息长度(TP-UDL) 实际长度6个字节
C8 32 9B FD 0E 01 用户信息(TP-UD) “Hello!”
例2 接收:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“你好!”。手机接收到的PDU串可以是
08 91 68 31 08 20 05 05 F0 84 0D 91 68 31 96 03 29 30 F0 00 08 30 30 21 80 63 54 80 06 4F 60 59 7D 00 21
对照规范,具体分析:
分段 含义 说明
08 地址信息的长度 个八位字节(包括91)
91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 08 20 05 05 F0 SMSC地址 8613800250500,补‘F’凑成偶数个
84 基本参数(TP-MTI/MMS/RP) 接收,无更多消息,有回复地址
0D 回复地址数字个数 共13个十进制数(不包括91和‘F’)
91 回复地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 96 03 29 30 F0 回复地址(TP-RA) 8613693092030,补‘F’凑成偶数个
00 协议标识(TP-PID) 是普通GSM类型,点到点方式
08 用户信息编码方式(TP-DCS) UCS2编码
30 30 21 80 63 54 80 时间戳(TP-SCTS) 2003-3-12 08:36:45  +8时区
06 用户信息长度(TP-UDL) 实际长度6个字节
4F 60 59 7D 00 21 用户信息(TP-UD) “你好!”

详细解析:
 0891683108200505F011190D91683105155694F50008FF10008FF044F60597D
   <1>短信中心地址字段:0891 
    08:Address-Lengt(地址长度),短信息中心地址长度为8个字节,是(91)+(683108200505F0)的长度,8个8位字节
 91地址类型:10010001       Bit7:1。始终为1       Bits 6,5,4:Type-of-Number(号码类型):001,代表Internation Number。也即是号码前加“+”。注意:对某些比较特殊的号码,例如手机与小灵通的互通时,这里不能设置为001,而要设置成000,代表号码前没有“+”,否则无法接收。
下面是GSM03.40协议号码类型的解释:
 0 0 0   Unknown
 0 0 1   International number
 0 1 0   National number
 0 1 1   Network specific number
 1 0 0   Subscriber number
 1 0 1   Alphanumeric(coded according to TS03.38 7-bit default alphabet)
 1 1 0   Abbreviated number
 1 1 1   Reserved for extension
 ll not interpret reserved values but will store them as received.
       Bits 3,2,1,0:Numbering-plan-identification(号码鉴别),0000—未知,0001—ISDN/电话号码(E.164/E.163),1111—留作扩展;一般默认为0001,表示电话号码类型的。下面是GSM03.40号码鉴别的解释:
Bits3 2 1 0
0 0 0 0    Unknown
0 0 0 1    ISDN/telephone numbering plan (E.164/E.163)
0 0 1 1    Data numbering plan (X.121)
0 1 0 0    Telex numbering plan
1 0 0 0    National numbering plan
1 0 0 1    Private numbering plan
1 0 1 0    ERMES numbering plan (ETSI DE/PS 3 01-3)
1 1 1 1    Reserved for extension
All other values are reserved.
<2>短信中心号码:683108200805F0 
一个字节内反转,8613800280500,如果长度为奇数则需要加“F”补齐。比如号码为:+8613505165495,去掉"+"后在末尾添加F变为:8613505165495F,再将手机号码的奇数位和偶数位的相交换为683105155694F5
<3>FirstOctet字段:1119
     (1)11       包含TP-MTI(2bit),TP-RD(1bit),TP-VPF(2bit),TP-RP(1bit),TP-UDHI(1bit),TP-SRR(1bit)
二进制表示形式:0 0 0 10 0 01
TP-MTI:01 TP-Message-Type-Indicator(消息类型指示符)

     Bit1,0:00—读出(Deliver); 01—提交(Submit)
Bit1,0:01指示为SMS-SUBMIT类型 
下面是GSM03.40的解释:
 bit1 bit0  Message type
       SMS-DELIVER (in the direction SC to MS)
       SMS-DELIVER REPORT (in the direction MS to SC)
       SMS-STATUS-REPORT (in the direction SC to MS)
       SMS-COMMAND (in the direction MS to SC)
       SMS-SUBMIT (in the direction MS to SC)
       SMS-SUBMIT-REPORT (in the direction SC to MS)
        ReservedTP-RD:0  TP-Reject-Duplicates(是否拒绝相同重复消息)

   Bit2:0—接受复制; 1—拒绝复制
 
 Bit2:0   指示短消息中心接收未转发的具有相同TP-MR的消息。
 Bit 2:
    Instruct the SC to accept an SMS-SUBMIT for an SM still held in the  SC which has the same TP-MR and the same TP-DA as a previously submitted SM from the same OA.
    Instruct the SC to reject an SMS-SUBMIT for an SM still held in the   SC which has the same TP-MR and the same TP-DA as the  previously submitted SM from the same OA. In this case an  appropriate TP-FCS value will be returned in the SMS-SUBMIT-REPORT.
TP-VPF:10   TP-Validity-Period-Format(有效期格式)

Bit4,3::00—不提供(Not present);01—预留;  10—整型(标准),指使用相对格式;11—提供8位字节的一半(Semi-Octet Represented) 
下面是GSM03.40的解释:
bit4 bit3
      TP-VP field not present
      TP-VP field present and integer represented (relative)
      Reserved
      TP-VP field present and semi-octet represented (absolute)
TP-SRR:0    TP-Status-Report-Request
   Bit5:    1:需要报告,0:不需要报告。
Bit 5:
      A status report is not requested
      A status report is requested
TP-UDHI:0   TP-User-Data-Header-Indicator(用户数据头标示)   Bit6:   1:含头信息  0:不含头信息,指示这是一个SMS消息,没有用户数据头,EMS(增强消息业务)消息需要设置。图片铃声这些都是包含头部信息的.文本不包含头部信息
Bit  6
    The TP-UD field contains only the short message
    The beginning of the TP-UD field contains a Header in addition to the  short message
TP-RP:0     TP-Reply-Path(回复路径)   Bit7:    1:设置回复路径,0:没有设置回复路径。
下面是GSM03.40解释:
Bit 7:
0:  TP-Reply-Path parameter is not set in this SMS-SUBMIT/DELIVER
1:  TP-Reply-Path parameter is set in this SMS-SUBMIT/DELIVER
(2)消息参考值TP-MR (TP-Message-Reference):19如果使用"00" 值代表让电话自己设置消息参考值.
 
  <4> 对方号码字段:0D913105155694F5 
    0D:目标地址数字个数,共13个十进制数(不包括91和‘F’)
    91:地址类型,同短信中心号码设置.
   3105155694F5:目标手机号码。

<5>上层协议标识TP-PID(TP-Protocol-Identifier):00
     一般设置为00,表示普通GSM,点对点  <6> 数据编码设置TP-DCS(TP-Data-Coding-Scheme):08 
    指示TP-UD的编码方式。08代表Unicode方式。参照GSM03.38协议:
Bit 3,2
00    Default alphabet
01    8 bit
10    UCS2 (16bit) [10]
11    Reserved
  <7>有效期TP-VP(TP-Validity-Period):FF
    FF表示最大。
  <8> 用户数据长度TP-UDL(TP-User-Data-Length):4
      用户数据实际长度。注意不同编码下用户长度定义不同。
   <9>用户数据 :4F60597D     "你好"的Unicode编码
你:0x4F60;好:0x597D
  2:手机接收的PDU串
 0891683108200505F0040D91683105155694F5000850208151754500044F60597D
   <1>短信中心地址字段:0891683108200505F0,即是+8613800250500
 <2>FirstOctet :04        其二进制代码:00000100
    TP-MTI:00
    TP-MMS(TP-More-Message-to-Send):1 短信中心没有更多的消息发送
    TP-SRI: 0
    TP-UDHI:0
    TP-RP:  0
 <3>发送方号码 :0D91683105155694F5   即+8613505165495
 <4>协议标识: 00    TP-DCS 点对点
 <5>编码方式: 08    TP-DCS Unicode编码
   <6>短信中心时间    50208151754500  
     字节反转05/02/18 15:57:45 最后的00代表时区,这里为0
   <7>用户数据长度 :4 
 <8>用户数据:4F60597D      
   中文“你好”的Unicode编码

纯英文长短信编码

当手机设置为PDU编码模式,则单条英文短信采用7bit编码。而长短信编码需要在短信内容前面加上编码长度,050003的协议头,长短信标识码,以及总条数和当前条数。由于这些编码占据一些字节,使得短信内容7bit编码的起始位不为7的倍数。因此长短信拆分的每条内容的第一个字节,需要左移一位放在编码后的第一个字节。后面的内容则按照普通7bit进行编码。

我们都知道7bit编码是把8字节的内容压缩成7个字节,而长短信拆分纯英文内容的规则是最多153个字符(字节)/条。第一个字符仅仅左移,后面152个字符参加7bit编码。(152刚好是8的倍数)。当然长短信拆分的最后一条子短信,有可能不足152个字符,这并没有关系。

最后长短信编码的长度为所有字符个数+7。

具体如下:

这条长短信内容为161个“a”

第一条子短信编码(153个a)

A0(153+7)   050003              06                   0201   C2                          E170381C0E87C3.......................

编码长度     长短信协议头    长短信标识码  1/2      左移第一个字母a   7bit编码内容,以上内容重复19次

第二条子短信编码(8个a)

0F(8+7)       050003              06                   0202  C2                          E170381C0E8701

编码长度     长短信协议头    长短信标识码   2/2    左移第一个字母a   7bit编码内容

------------------------------------------------------------------------------------------------

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有