亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 php教程 php手冊 轉(zhuǎn)一個手機開發(fā)的帖子(來自開發(fā)者俱樂部)

轉(zhuǎn)一個手機開發(fā)的帖子(來自開發(fā)者俱樂部)

Jun 21, 2016 am 09:14 AM
lt pdu string

代碼:--------------------------------------------------------------------------------
目前手機短信息的應(yīng)用越來越廣泛,互聯(lián)網(wǎng)上提供短信息發(fā)送的站點也越來越多,但一些站點的服務(wù)并不盡如人意,往往發(fā)出去的短信息石沉大海。最可靠的發(fā)送方法當(dāng)然是用手中的手機了,如果設(shè)置了狀態(tài)報告,更能確切知道對方是否收到了此條信息。手機發(fā)送盡管比較可靠, 但也存在輸入麻煩、效率低的問題。本文介紹一種方法,只要手機能夠與電腦相連(通過紅外端口或用手機數(shù)據(jù)線連接串行口,同時手機支持GSM AT指令集),就可以通過自行編制的短信息發(fā)送軟件,實現(xiàn)短信息的發(fā)送。
現(xiàn)在市場上的大多數(shù)手機均支持類似于Modem控制的GSM AT指令集,該指令集是由諾基亞、愛立信、摩托羅拉和HP等廠家共同為GSM系統(tǒng)研制的,其中包含了對SMS(Short Message Service)的控制。
GSM AT相關(guān)指令的介紹
與SMS有關(guān)的GSM AT指令如表1所示:

表1 相關(guān)的GSM AT指令
對SMS的控制共有三種實現(xiàn)途徑:
Block Mode;
基于AT命令的Text Mode;
基于AT命令的PDU Mode。
Text Mode比較簡單,多款諾基亞手機均支持該模式。西門子的手機大多只支持PDU模式,PDU模式是發(fā)送或接收手機SMS信息的一種方法,短信息正文經(jīng)過十六進制編碼后被傳送。目前,PDU已取代Block Mode,因此本文主要探討PDU模式的發(fā)送。
計算機和手機的通信
本文以西門子 S3568i為例,介紹如何實現(xiàn)短信息的發(fā)送。
數(shù)據(jù)線連接
首先,通過S35/25數(shù)據(jù)線將手機與電腦串行口相連。然后,打開超級終端,選擇直接串行口連接,端口參數(shù)設(shè)為19200速率、無校驗、數(shù)據(jù)位8、停止位1。
紅外線連接
如果使用帶紅外端口的計算機,可以設(shè)置與手機的無線連接。首先確認(rèn)計算機紅外端口已打開,并將手機的紅外線和收傳真/數(shù)據(jù)功能打開,對接紅外端口,計算機系統(tǒng)托盤上應(yīng)當(dāng)出現(xiàn)一個紅外設(shè)備西門子S35(如果沒有安裝紅外監(jiān)視器,則不顯示)。然后,打開超級終端,選擇IrDa上的串行口。
連接測試
點擊超級終端工具條上的呼叫按鈕,輸入AT并回車,屏幕上如果出現(xiàn)OK則表明計算機與手機的連接成功,這時就可以輸入各類GSM AT指令了。
如:查詢手機廠家,輸入AT+CGMI=,屏幕顯示Siemens。
通常情況下,執(zhí)行測試命令A(yù)T+CMGS=?,如果返回OK,表明手機支持此指令。該指令的完整語法格式如下:
If PDU mode (+CMGF=0)+CMGS=PDU is given
如果短信息格式指令A(yù)T+CMGF返回的是0,則SMS格式為PDU模式,再執(zhí)行AT+CMGS=命令后,手機返回“>”符號并等待輸入,輸入PDU數(shù)據(jù)并以^Z或Esc鍵結(jié)束。
如果信息發(fā)送成功,則返回OK,并顯示信息號:
+CMGS:
如果發(fā)送失敗,則返回如下信息:
+CMS ERROR:
PDU數(shù)據(jù)格式的分析
下面通過對存儲在手機中的待發(fā)信息的分析,來介紹SMS PDU的數(shù)據(jù)格式。首先,用手機寫一條短信息,發(fā)送手機號碼為13605696031,信息內(nèi)容為“Hello World!”。通過執(zhí)行AT+CMGL=2可以讀出此條信息。
操作過程如下(斜體字符為響應(yīng)信息,{}內(nèi)為注釋):
AT
OK
AT+CMGL=2 {讀未發(fā)短信息}
+CMGL: 1,2,,24 {1表示信息個數(shù),2表示未發(fā)信息,24表示信息總?cè)萘縸
08 91 683108501505F0 11 00 0B 81 3106656930F1 0000A7 0B E8329BFD06DDDF723619
OK 
下面分析這條信息:
08:短信息中心地址長度。
91:短信息中心號碼類型,91是TON/NPI。TON/NPI遵守International/E.164標(biāo)準(zhǔn),指在號碼前需加‘+’號;此外還可有其他數(shù)值,但91最常用。
683108501505F0:短信息號碼,是所使用的服務(wù)中心地址。由于位置上略有處理,實際號碼應(yīng)為:8613805515500(字母F意指長度減1),這是作者所在地GSM短信息中心的號碼。
11:文件頭字節(jié)(header byte,是一種bitmask)。這里11指正常地發(fā)送短信息。
00:信息類型。
0B:被叫號碼長度。
81:被叫號碼類型。
3106656930F1:被叫號碼,也經(jīng)過了移位處理,實際號碼為13605696031。
0000A7:短信息編碼類型GSM Default Alphabet,如為中文則是000010。
0B:短信息長度。
E8329BFD06DDDF723619:短信息內(nèi)容“Hello World!”。
短信息的編碼方法及編程實現(xiàn)
下面我們介紹純英文和純中文的信息編碼方法。通過測試我們發(fā)現(xiàn),每條發(fā)送的短信息前面部分均相同,只是被叫號碼和短信息內(nèi)容有變化。
1.英文編碼
參見表2,設(shè)短信息內(nèi)容為“Hello World!”。缺省的GSM 字符集為7位編碼,可以簡單地理解為ASCII碼(ASCII值小于80Hex,因此,Bit8被忽略),依次將下一7位編碼的后幾位逐次移至前面,形成新的8位編碼,參見表2箭頭指示。需要注意的是第9行,移位計數(shù)已達(dá)7位,則直接將本編碼前加0。GSM并非支持所有的ASCII字符顯示。
表2 英文編碼的實現(xiàn)過程

下面是實現(xiàn)英文編碼的部分Delphi 5代碼:
//英文格式編碼,s為String
function Encode1(var s:String):String;
var
i,j,len:Integer;
cur:Integer;
t:String;
begin
Result:=‘’;
len:=Length(s);
//j 用于移位計數(shù)
i:=1;j:=0;
while ibegin
if i//數(shù)據(jù)變換
cur:=(ord(s[i]) shr j) or ((ord(s[i+1]) shl (7-j)) and $ff)
else
cur:=(ord(s[i]) shr j) and $7f;
FmtStr(t,‘%2.2X’,[cur]);
Result:=Result+t;
inc(i);
//移位計數(shù)達(dá)到7位的特別處理
j:=(j+1) mod 7;if j=0 then inc(i);
end;
end;  
2.中文編碼
參見表3,設(shè)短信息內(nèi)容為“中文短信息”。中文短信息的實現(xiàn)較簡單,只需將??????的中文編碼轉(zhuǎn)換為代碼頁為CP936的Unicode編碼即可。
表3 中文編碼的實現(xiàn)過程

通過Delphi的WideString類型轉(zhuǎn)換,可以巧妙地實現(xiàn)??????到Unicode的編碼轉(zhuǎn)換(注意代碼頁和操作系統(tǒng)相關(guān)聯(lián))。下面是實現(xiàn)中文編碼的部分Delphi 5代碼:
// 中文格式編碼,s為Unicode String
function Encode2(var s:WideString):String;
var
i,len:Integer;
cur:Integer;
t:String;
begin
Result:=‘’;
len:=Length(s);
i:=1;
while ibegin
cur:=ord(s[i]);
//BCD轉(zhuǎn)換
FmtStr(t,‘%4.4X’,[cur]);
Result:=Result+t;
inc(i);
end;
end;
小 結(jié)
以上介紹了PDU格式的短信息編碼。建議英文信息長度不超過140個字符,中文信息不要超過54個漢字。如果使用能夠支持文本方式的手機進行發(fā)送,實現(xiàn)起來更簡單。如發(fā)送“Hello World!”,用如下的AT指令即可:
AT+CGMF=1AT+CGMS=“13605696031”,129
>Hello World!



本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
使用java的String.valueOf()函數(shù)將基本資料型別轉(zhuǎn)換為字串 使用java的String.valueOf()函數(shù)將基本資料型別轉(zhuǎn)換為字串 Jul 24, 2023 pm 07:55 PM

使用Java的String.valueOf()函數(shù)將基本資料型別轉(zhuǎn)換為字串在Java開發(fā)中,當(dāng)我們需要將基本資料型別轉(zhuǎn)換為字串時,常見的方法是使用String類別的valueOf()函數(shù)。這個函數(shù)可以接受基本資料類型的參數(shù),並傳回對應(yīng)的字串表示。在本文中,我們將探討如何使用String.valueOf()函數(shù)進行基本資料型別轉(zhuǎn)換,並提供一些程式碼範(fàn)例來

怎麼把char數(shù)組轉(zhuǎn)string 怎麼把char數(shù)組轉(zhuǎn)string Jun 09, 2023 am 10:04 AM

char陣列轉(zhuǎn)string的方法:可以透過賦值來實現(xiàn),使用{char a[]=" abc d\0efg ";string s=a;}語法,讓char陣列對string直接賦值,執(zhí)行程式碼即可完成轉(zhuǎn)換。

使用java的String.replace()函數(shù)替換字串中的字元(字串) 使用java的String.replace()函數(shù)替換字串中的字元(字串) Jul 25, 2023 pm 05:16 PM

使用Java的String.replace()函數(shù)替換字串中的字元(字串)在Java中,字串是不可變的對象,這意味著一旦創(chuàng)建了一個字串對象,就無法修改它的值。但是,你可能會遇到需要替換字串中的某些字元或字串的情況。這時候,我們可以使用Java的String類別中的replace()方法來實作字串的替換。 String類別的replace()方法有兩種重

使用java的String.length()函數(shù)取得字串的長度 使用java的String.length()函數(shù)取得字串的長度 Jul 25, 2023 am 09:09 AM

使用Java的String.length()函數(shù)取得字串的長度在Java程式設(shè)計中,字串是一種非常常見的資料類型,我們經(jīng)常需要取得字串的長度,即字串中字元的個數(shù)。在Java中,我們可以使用String類別的length()函數(shù)來取得字串的長度。下面是一個簡單的範(fàn)例程式碼:publicclassStringLengthExample{publ

使用java的String.startsWith()函數(shù)判斷字串是否以指定前綴開頭 使用java的String.startsWith()函數(shù)判斷字串是否以指定前綴開頭 Jul 25, 2023 pm 02:27 PM

使用Java的String.startsWith()函數(shù)判斷字串是否以指定前綴開頭在Java程式設(shè)計中,我們經(jīng)常需要對字串進行處理和判斷。其中一個常見的操作就是判斷字串是否以指定的前綴開頭。 Java中提供了String類別的startsWith()函數(shù),可以方便地實作這個功能。 String的startsWith()函數(shù)String類別是Java中最常用的類別

2w字 詳解 String,yyds 2w字 詳解 String,yyds Aug 24, 2023 pm 03:56 PM

大家好,今天跟大家分享java基礎(chǔ)之String。 String類別的重要性就不必說了,可以說是我們後端開發(fā)用的最多的類,所以,很有必要好好聊聊它。

java的String類別如何使用 java的String類別如何使用 Apr 19, 2023 pm 01:19 PM

一、認(rèn)識String1.JDK中的String首先我們看看JDK中的String類別源碼,它實作了很多接口,可以看到String類別被final修飾了,這就說明String類別不可以被繼承,String不存在子類,這樣所有使用JDK的人,用到的String類別都是同一個,如果String允許被繼承,每個人都可以對String進行擴展,每個人使用的String不是同一個版本,兩個不同的人使用相同的方法,表現(xiàn)出不同的結(jié)果,這就導(dǎo)致程式碼沒辦法進行開發(fā)了繼承和方法覆寫在帶來彈性的同時,也會帶來很多子類別行為不

使用java的String.toLowerCase()函數(shù)將字串轉(zhuǎn)換為小寫 使用java的String.toLowerCase()函數(shù)將字串轉(zhuǎn)換為小寫 Jul 24, 2023 pm 11:52 PM

String.toLowerCase()函數(shù)是Java中一個非常有用且常見的字串處理函數(shù),它可以將一個字串轉(zhuǎn)換為小寫形式。在本文中,我們將介紹該函數(shù)的使用方法,並給出一些相關(guān)的程式碼範(fàn)例。首先,讓我們來看看String.toLowerCase()函數(shù)的基本語法。它沒有任何參數(shù),只需要呼叫它。下面是範(fàn)例程式碼:Stringstr="Hel

See all articles