下面是實現英文編碼的部分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 用於移位計數
i:=1;j:=0;
while i<=len do
begin
if i//資料變換
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);
//移位計數達到7位的特別處理
j:=(j+1) mod 7;if j=0 then inc(i);
end;
end;
2.中文編碼
參見表3,設簡訊息內容為“中文簡訊息”。中文簡訊息的實現較簡單,只需將??????的中文編碼轉換為字碼頁為CP936的Unicode編碼即可。
表3 中文編碼的實現過程
通過Delphi的WideString類型轉換,可以巧妙地實現??????到Unicode的編碼轉換(注意字碼頁和作業系統相關聯)。下面是實現中文編碼的部分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 i<=len do
begin
cur:=ord(s[i]);
//BCD轉換
FmtStr(t,‘%4.4X’,[cur]);
Result:=Result+t;
inc(i);
end;
end;
小 結
以上介紹了PDU格式的簡訊息編碼。建議英文資訊長度不超過140個字元,中文資訊不要超過54個漢字。如果使用能夠支援文本方式的手機進行發送,實現起來更簡單。如發送“Hello World!”,用如下的AT指令即可:
AT+CGMF=1AT+CGMS=“13605696031”,129
>Hello World!<^Z>