PDU模式的短信息编/解码方法与实现
扫描二维码
随时随地手机看文章
1 短信息模式与分析
SMS是由ETSI组织制定的一个规范。短信息格式有两种:TEXT模式和PDu模式。TEXT模式是基于ASCII码形式字符的一种结构模式,每一条命令很容易读懂,实现起来电十分容易;缺点是不能收发中文短信,PDU模式也是基于十六进制形式字符的,数据和代码都经过编码,所以无法直接读懂;但PDU模式同时支持中英文两种短信。PDU模式收发短信包括3种编码:7位、8位和UCS2编码。7位编码用于发送普通的ASCII字符,8位编码用于发送数据信息,UCS2编码用于发送Unicode字符。PDU模式在GSM移动设备中使用得最为普遍。
在PDU模式中,当使用7位编码时,最多可发160个字符;使用8位编码时,最多可发140个字符;使用16位编码时,最多可发70个汉字字符。因此在发送时需要将8位(HEX)字节数据编码成8位(OCT)字节发送;接收时需要将8位(OCT)字节解码成7位(ASCII)字节。
PDU模式短信息结构中,较难实现的是对用户数据部分的编/解码。例如,要发送数据为“123456789abc”,经过编码后变成“31 D9 8C 56 B3 DD 70 B9 B0 78 OC”。
2 编码分析
在这里规定.对于一个8位字符最右边为第0位,最左边为第7位。设需要发送的短信息内容为“123456789abc”,编码后变为“3l D9 8C 56 B3 DD 70 B9BO 78 0C”。使用的GSM字符集为7位编码。需要注意的是在每次操作之前,都要将原始数据保存好。首先,将第1个字符转换为7位的二进制,将第1个字符右移0位。然后,将第2个字符的最右边的第O位加到第1个字符的第7位,形成一个8位字符,第2个字符的最右边的第1位通过右移1位方式销毁。之后,将第2个字符转换为7位的二进制,将第2个字符右移1位;将第3个字符最右边的2位(第l、0位)填加到第2个字符的第7、6位,形成一个8位字符;第3个字符的最右边的2位通过右移2位方式销毁。其他字符依此类推。当第8个字符需要第9个宁符全部补位时,还不够,就从第10个字符取最右边的第0位加到第8个字符的第7位。依次循环,当最后一个字符没有下一个字符给它填位时,就填0占位,完成数据编码。
可以形成表达式:(所有移位方式都选用带进位位(C=0)循环移位,也就是被移入位均为0)
A(要编码的字符)=当前字符右移m次取自己保留的内容+后一个字符左移n次取需要给前一个字符填充的内容。
B(编码移位次数)=m+n=7(7≥m≥0;7≥n≥O)。m为右移次数;n为左移次数。
3 解码分析
设收到的短信息内容为“31 D9 8C 56 B3 DD 70 B9B0 78 OC”,解码后变为“123456789abc”。解码过程是将第1个字符的第7位移走,保存起来,补给第2字符的第O位。第1个字符左移O位,第1个字符的第7位销毁,形成一个新的7位ASCII字符;第2个字符第7、6位移走,保存起来,提供给第3个字符的第2、1位,第2个字符的第7、6位销毁,第2个字符左移1位,将前一个字符回填内容添加到第2个字符的第O位,从而又形成一个新的7位ASCII字符,依此方法类推。须注意的是,当第8个字符提供第9个字符全部7位时,形成第9个字符,同时第7位提供给第1O个字符的最右边第O位。依次循环,形成解码数据。
可以形成表达式:
A(要解码字符)一前一个字符右移M次取需要给后一个字符回填内容+当前字符左移N次取自己保留的内容。
B(解码移位次数)=M+N=8(8≥M≥0;8≥N≥0)。M为右移次数;N为左移次数。
例如:
粗体部分在编码发送时用于提供给前一个字符借用,在解码接收时由前一个字符回填给本字符;斜体部分是本字符需要保留的内容。
4 单片机子程序实现
主控制器采用华邦W77E58型号单片机,短信息发送与接收模块采用Motorola公司的G20型号,单片机子程序编写采用MCS51汇编语言。以下所列代码是实际应用工程截取的主要部分,经过实际验证,且一直应用于“高速GSM型紧急电话系统”中。(编码和解码程序见本刊网站www.mesnet.com.cn——编者注。)
结语
在短信息结构中,对用户数据转化成PDU模式编/解码比较麻烦。有了以上对编/解码的分析思路,实现起来就很容易。该部分可以通过C或其他形式语言代码编写,形成子程序块,嵌入剑其他应用系统中。