?? 中文pud短信說(shuō)明.txt
字號(hào):
VBAT中文短信
編輯 | 刪除 | 權(quán)限設(shè)置 | 更多▼ 設(shè)置置頂
推薦日志
轉(zhuǎn)到私密記事本
放任 發(fā)表于2009年04月11日 00:49 閱讀(0) 評(píng)論(0)
分類: 個(gè)人日記 權(quán)限: 公開
首先介紹一下VB中的兩個(gè)函數(shù):ChrW()和AscW().對(duì)于Chr()和Asc()函數(shù)大家一定很熟悉,對(duì)于ChrW()和AscW()可能會(huì)比較生疏一點(diǎn). ChrW 函數(shù)返回包含 Unicode 的 String,若在不支持 Unicode 的平臺(tái)上,則其功能與 Chr 函數(shù)相同; AscW 函數(shù)返回 Unicode 字符代碼,若平臺(tái)不支持 Unicode,則與 Asc 函數(shù)功能相同。對(duì)于這兩個(gè)函數(shù)我們各舉一個(gè)例子說(shuō)明:
?ascw("短")
30701
?chrw(26482)
杲
可見這兩個(gè)函數(shù)可以實(shí)現(xiàn)中文和Unicode碼之間的轉(zhuǎn)換,對(duì)于我們編碼解碼十分方便.我們得到中文的Unicode碼之后,就可以編制Pdu串了.
我們?cè)倭私庖幌翽du串的構(gòu)成,我們看這樣一個(gè)Pdu串(我調(diào)試程序時(shí)采用):
0891683110301405F011000D91683159717456F4000800165982679C6536523077ED4FE1002C8BF756DE590D002E.
我們將其分解為:
08 SMSC地址信息的長(zhǎng)度(91683110301405F0共八位字節(jié))
91 SMSC地址格式(TON/NPI)
683110301405F0 SMSC地址(8613010341500南京的短信服務(wù)中心號(hào)碼)
11 基本參數(shù)(TP-MTI/VFP)( 發(fā)送,接收為84)
00 MR Message Reference
0D 目標(biāo)SIM卡號(hào)碼長(zhǎng)度(683159717456F4按阿拉伯?dāng)?shù)字個(gè)數(shù)計(jì))
91 同上
683159717456F4 對(duì)方手機(jī)SIM卡號(hào)(8613057575064)
00 普通GSM類型,點(diǎn)到點(diǎn)方式
08 UCS2編碼
00 有效期
16 用戶信息長(zhǎng)度(5982679C6536523077ED4FE1002C8BF756DE590D002E的長(zhǎng)度共22為字節(jié))
5982679C6536523077ED4FE1002C8BF756DE590D002E(“如果收到短信,請(qǐng)回復(fù).”Unicode碼)
Pdu碼的構(gòu)成我們已經(jīng)了解后,我們就可以開始編碼了,上面的紅色部分就是我們要編碼實(shí)現(xiàn)的.
首先看SMSC地址: 683110301405F0與8613010341500F(SMSC最后一位補(bǔ)F構(gòu)成14位),我們可以發(fā)現(xiàn)只需將奇偶位對(duì)調(diào)即可.同樣道理: 683159717456F4與8613057575064也是一樣的處理.
對(duì)于用戶信息長(zhǎng)度,我們可以通過VB里的Len函數(shù)得到,例如”你好”,我們用Len(“你好”)得到2,那么2*2=4即為用戶信息長(zhǎng)度04(這里要轉(zhuǎn)換為16進(jìn)制,并且是兩位).對(duì)于Unicode碼,我們可以通過AscW()函數(shù)一個(gè)一個(gè)漢字取出其Unicode碼即可得到.
下面給出短信發(fā)送的具體實(shí)現(xiàn)代碼(相關(guān)知識(shí)可參見前一篇文章):
If MSComm1.PortOpen = False Then MSComm1.PortOpen = True
Length=Len(“如果收到短信,請(qǐng)回復(fù).”)*2
MSComm1.Output = "AT+CMGF=0" + vbCr ‘以Pdu模式發(fā)送短信
MSComm1.Output = "AT+CMGS=" & Str(15 + length ) + vbCr
MSComm1.Output= “0891683110301405F011000D91683159717456F4000800165982679C6536523077ED4FE1002C8BF756DE590D002E” & Chr$(26)
start = Timer
pause =1
While Timer < start + pause
DoEvents
Wend
reco = MSComm1.Input
If InStr(reco, "OK") Then sendsms = True
If InStr(reco, "ERROR") Then sendsms = False
MSComm1.Output = "AT+CMGS=" & Str(15 + length ) + vbCr中的15為 11000D91683159717456F400080016的位數(shù).length為5982679C6536523077ED4FE1002C8BF756DE590D002E的位數(shù)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -