pdu为PDU模式的数据包。 然后,要分析PDU数据包,根据PDU的数据格式将收到的中文信息和其它相关信息解析出来。 5.1 PDU数据包格式 PDU数据包由两部分构成,短信息服务中心地址(SMSC address)和TPDU,表2为PDU数据包的格式,其中一个数据单元为一个字节。 其中短信息服务中心号码、发送源号码、日期以及时间采用压缩BCD码表示,低位在前,高位在后。在本文的网络补充版()中给出了通过读取短信息的AT命令(AT+CMGR=1)从GSM模块读到的一条PDU模式的短信息,并给出常见的数值与解释。 5.2 PDU模式的纯英文短信息解码 PDU模式的纯英文短信息编码使用GSM字符集的7位编码,此时TP-DCS的值为00。如短信息内容为英文字符“Hi”,首先将各个字符转换为7位的标准二进制ASCII码,然后要将后面字符的低位逐位调整到前面,补齐前面的差别。例如:“H”的二进制ASCII码为1001000,“i” 二进制ASCII码为1101001;显然H的二进制编码不足八位,那么就将后面字符i的最后一位补足到H的前面,就成了11001000(C8),i剩下六位110100,前面再补两个0,变成00110100(34),于是“Hi”就变成了两个八进制数 C834。由于PDU模式的纯英文短信息采用7位编码,解码不方便,因此对于只需发送和接收纯英文字符和数字符号的应用,最好采用Text模式发送和接收短信息。 表2 PDU数据包格式(接收MSM) 备注名称长度数据单元bit位 7 6 5 4 3 2 1 0 SMSC地址长度 1 N+1(十六进制数) SMSC地址类型 1 1 号码类型号码表 SMSC号码 N 号码第2位号码第1位 号码第4位号码第3位 …… …… 号码第n位号码第n-1位 TPDU第一字节 1 最长12字节发送源号码长度 1 实际号码位数k(十六进制数) 发送源号码类型 1 1 号码类型号码表 发送源号码 M 号码第2位号码第1位 号码第4位号码第3位 号码第k位号码第k-1位 TP-PID 1 TP-DCS 1 TP-SCTS 7 年低位年高位 月低位月高位 日低位日高位 时低位时高位 分低位分高位 秒低位秒高位 时 区 TP-UDL 1 最长140字节 TP-UD短信息内容 1 1 1 1 5.3 中文短信息的解码 由于中文字的编码是采用2个字节的编码,因此发送和接收中文或中英文混合的短信息只能采用PDU模式。但在GSM标准中,中文编码采用UTF-8的编码,不是目前国内常用的GB-2312编码,故还需要进行中文编码的转换,才能与采用GB-2313汉字库相配合显示汉字字型。 由于UTF-8和GB-2312编码之间不存在一一对应的线性关系,因此只能采用查表的方式进行转换。下面给出一个由UTF-8到GB-2312编码转换的算法。