可见这两个函数可以实现中文和unicode码之间的转换,对于我们编码解码十分方便.我们得到中文的unicode码之后,就可以编制pdu串了. 我们再了解一下pdu串的构成,我们看这样一个pdu串(我调试程序时采用): 0891683110301405f011000d91683159717456f4000800165982679c6536523077ed4fe1 002c8bf756de590d002e.我们将其分解为: 08 smsc地址信息的长度(91683110301405f0共八位字节)91 smsc地址格式(ton/npi)683110301405f0 smsc地址(8613010341500南京的短信服务中心号码)11 基本参数(tp-mti/vfp)( 发送,接收为84)00 mr message reference0d 目标sim卡号码长度(683159717456f4按阿拉伯数字个数计)91 同上683159717456f4 对方手机sim卡号(8613057575064)00 普通gsm类型,点到点方式08 ucs2编码00 有效期16 用户信息长度(5982679c6536523077ed4fe1002c8bf756de590d002e的长度共22为字节)5982679c6536523077ed4fe1002c8bf756de590d002e(“如果收到短信,请回复.”unicode码) pdu码的构成我们已经了解后,我们就可以开始编码了,上面的红色部分就是我们要编码实现的. 首先看smsc地址: 683110301405f0与8613010341500f(smsc最后一位补f构成14位),我们可以发现只需将奇偶位对调即可.同样道理: 683159717456f4与8613057575064也是一样的处理. 对于用户信息长度,我们可以通过vb里的len函数得到,例如”你好”,我们用len(“你好”)得到2,那么2*2=4即为用户信息长度04(这里要转换为16进制,并且是两位).对于unicode码,我们可以通过ascw()函数一个一个汉字取出其unicode码即可得到. 下面给出短信发送的具体实现代码(相关知识可参见前一篇文章):if mscomm1.portopen = false then mscomm1.portopen = truelength=len(“如果收到短信,请回复.”)*2mscomm1.output = "at+cmgf=0" + vbcr ‘以pdu模式发送短信mscomm1.output = "at+cmgs=" & str(15 + length * 2) + vbcr mscomm1.output= “0891683110301405f011000d91683159717456f4000800165982679c6536523077ed 4fe1002c8bf756de590d002e” & chr$(26) start = timerpause =1while timer < start + pausedoeventswend reco = mscomm1.inputif instr(reco, "ok") then sendsms = trueif instr(reco, "error") then sendsms = falsemscomm1.output = "at+cmgs=" & str(15 + length * 2) + vbcr中的15为 11000d91683159717456f400080016的位数.length*2为5982679c6536523077ed4fe1002c8bf756de590d002e的位数. 到这里,短信的发送基本完成,短信的接收更简单一点,主要是解码,就是应用chrw()函数了.写完这篇文章,才算送了一口气,算是对大家有个交待吧,感谢大家的关注.如果需要源代码,可以给我发邮件 :tmjpd@21cn.com.

评论