之前别人给我的用AT指令收发短信的代码,是根据C++代码改写过来的,我没有测试过下面是解码的部分。我只是做了发短信的程序,所以解码这个部分我没用过,不知到有没有问题。
--------------------------
function RevertNum(s : string) : string;
var
ls ,lstemp , lsResult: string;
len : integer;
begin
ls := s;
len := length(s);
if len mod 2 <> 0 then
ls := ls + 'F';
lsResult := '';
while length(ls) > 0 do
begin
lstemp := Copy(ls , 1 , 2);
ls := Copy( ls , 3 , length(ls) -2);
lsResult := lsResult + lsTemp[2] + lsTemp[1] ;
end;
Result := lsResult;
end;
function HextoInt(s : char) : integer;
var
i : integer;
begin
case s of
'a','A': i:=10;
'b','B': i:=11;
'c','C': i:=12;
'd','D': i:=13;
'e','E': i:=14;
'f','F': i:=15;
'0'..'9': i:=StrToInt(s);
else i:=0;
end;
Result := i;
end;
function DecodeMsg(str : string ; var sCenter : string ;
var sNbr : string ; var sTime : string ; var sMsg : string) : integer;
var
lsStr , lsTemp : string;
tmp : widechar;
data , liTemp : integer;
begin
sNbr := '';
sTime :='';
sCenter := '';
sMsg := '';
lsStr := str;
//地址信息的长度 08
lsTemp := Copy(lsStr , 1 , 2);
lsStr := Copy(lsStr , 3 , length(lsStr) -2);
//SMSC地址格式(TON/NPI) 91
lsTemp := Copy(lsStr , 1 , 2);
lsStr := Copy(lsStr , 3 , length(lsStr) -2);
//SMSC地址
lsTemp := Copy(lsStr , 1 , 14);
lsStr := Copy(lsStr , 15 , length(lsStr) -14);
sCenter := RevertNum(lsTemp);
if sCenter[14] = 'F' then
sCenter := Copy(sCenter , 1 ,13);
//基本参数(TP-MTI/MMS/RP)
lsTemp := Copy(lsStr , 1 , 2);
lsStr := Copy(lsStr , 3 , length(lsStr) -2);
//回复地址数字个数 0D
lsTemp := Copy(lsStr , 1 , 2);
lsStr := Copy(lsStr , 3 , length(lsStr) -2);
//回复地址格式(TON/NPI) 91
lsTemp := Copy(lsStr , 1 , 2);
lsStr := Copy(lsStr , 3 , length(lsStr) -2);
//回复地址(TP-RA)
lsTemp := Copy(lsStr , 1 , 14);
lsStr := Copy(lsStr , 15 , length(lsStr) -14);
sNbr := RevertNum(lsTemp);
if sNbr[14] = 'F' then
sNbr := Copy(sNbr , 1 ,13);
//协议标识(TP-PID) 00 //用户信息编码方式(TP-DCS)
lsTemp := Copy(lsStr , 1 , 4);
lsStr := Copy(lsStr , 5 , length(lsStr) -4);
//时间戳(TP-SCTS)
lsTemp := Copy(lsStr , 1 , 12);
lsStr := Copy(lsStr , 13 , length(lsStr) -12);
sTime := RevertNum(Copy(lsTemp , 1 ,2)) + '-'
+ RevertNum(Copy(lsTemp , 3 ,2)) + '-'
+ RevertNum(Copy(lsTemp , 5 ,2)) + ' '
+ RevertNum(Copy(lsTemp , 7 ,2)) + ':'
+ RevertNum(Copy(lsTemp , 9 ,2)) + ':'
+ RevertNum(Copy(lsTemp , 11 ,2));
//时区
lsTemp := Copy(lsStr , 1 , 2);
lsStr := Copy(lsStr , 3 , length(lsStr) -2);
//用户信息长度(TP-UDL)
lsTemp := Copy(lsStr , 1 , 2);
lsStr := Copy(lsStr , 3 , length(lsStr) -2);
while length(lsStr) > 0 do
begin
lsTemp := Copy(lsStr , 1 , 4);
lsStr := Copy(lsStr , 5 , length(lsStr) - 4);
data := HexToInt(lsTemp[4]) + HexToInt(lsTemp[3]) * 16
+ HexToInt(lsTemp[2]) * 256 + HexToInt(lsTemp[1])*4096 ;
sMsg := sMsg + WideChar(data);
end ;
end;