M
mawei0913_green
Unregistered / Unconfirmed
GUEST, unregistred user!
最近在做一个关于短消息的编程,当用户发一条短信给Gsm modem时,modem根据发的内容,将从数据库中读取相应的内容,然户将相应的内容以一条短信的形式发送给用户。可是当输入短信长度小于<=7时,可以完全读取用户发来的内容,例如"1411103",它显示1411103,但是当输入的短信长度>7时,不能完全读取用户发来的信息,例如"14111038",它只显示1411103,后面的8没有读取出来,也就是说短消息只要大约>7的长度,它就不能完全读取。
下面菜鸟将用到的代码列出来,请各位高人帮忙,谢谢!!
//解析接收的消息,s是接收的短信
//oa是手机号,rd是接收的日期,ud代表接收到的内容
function TForm_Main.DecodeRecvData(head, s: string): Boolean
var
len : string;
reclen : string;
t : string;
i, l : Integer;
oa : string; //源地址
ud : string; //用户信息
rd: string;
ct : Integer;
Str : String;
iThird : Integer;
begin
if s <> '' then
begin
t := s;
iThird := 16;
repeat
Str := Copy(t,iThird,1);
iThird := iThird + 1;
until
Str = '0';
reclen := Copy(t,iThird - 1,Length(t) - 8 - iThird+2);
t := reclen;
len := '$' + Copy(t, 1, 2); //短信中心号码长度
i := 1 + 2 + 2 * StrToInt(len); //忽略短信中心号码
//效验接收长度是否正确
i := i + 2; //忽略
l := StrToInt('$' + Copy(t, i, 2)); //源地址长度
l := ((l div 2) + (l mod 2)) * 2;
i := i + 2;
i := i + 2; //忽略源地址类型
oa := TelNumDecode(Copy(t, i, l));
i := i + l;
i := i + 2; //忽略协议类型
ct := StrToInt('$' + Copy(t, i , 2)); //编码类型
i := i + 2;
rd := TimeStampDecode(Copy(t, i, 12));
i := i + 12;
i := i + 2; //忽略时区
len := '$' + Copy(t, i, 2);
i := i + 2;
ct := (ct and $0c) shr 2;
if ct = 2 then
ud := USC2Decode(Copy(t, i, StrToInt(len) * 3))
else if ct = 0 then
ud := GsmAlphabetDecode(Copy(t, i, StrToInt(len) * 3))
else
ud := Copy(t, i, StrToInt(len) * 2);
end;
WriteToLog('接收:' + oa + ',' + rd + ',' + ud);
Deal.ParseNote(oa,rd,ud);//oa是手机号,rd是接收的日期,ud代表接收到的内容
end;
菜鸟想问的就是这个ud,不能完全读取出来,请各位高人帮忙看看,本人在这里先谢过啦!
下面菜鸟将用到的代码列出来,请各位高人帮忙,谢谢!!
//解析接收的消息,s是接收的短信
//oa是手机号,rd是接收的日期,ud代表接收到的内容
function TForm_Main.DecodeRecvData(head, s: string): Boolean
var
len : string;
reclen : string;
t : string;
i, l : Integer;
oa : string; //源地址
ud : string; //用户信息
rd: string;
ct : Integer;
Str : String;
iThird : Integer;
begin
if s <> '' then
begin
t := s;
iThird := 16;
repeat
Str := Copy(t,iThird,1);
iThird := iThird + 1;
until
Str = '0';
reclen := Copy(t,iThird - 1,Length(t) - 8 - iThird+2);
t := reclen;
len := '$' + Copy(t, 1, 2); //短信中心号码长度
i := 1 + 2 + 2 * StrToInt(len); //忽略短信中心号码
//效验接收长度是否正确
i := i + 2; //忽略
l := StrToInt('$' + Copy(t, i, 2)); //源地址长度
l := ((l div 2) + (l mod 2)) * 2;
i := i + 2;
i := i + 2; //忽略源地址类型
oa := TelNumDecode(Copy(t, i, l));
i := i + l;
i := i + 2; //忽略协议类型
ct := StrToInt('$' + Copy(t, i , 2)); //编码类型
i := i + 2;
rd := TimeStampDecode(Copy(t, i, 12));
i := i + 12;
i := i + 2; //忽略时区
len := '$' + Copy(t, i, 2);
i := i + 2;
ct := (ct and $0c) shr 2;
if ct = 2 then
ud := USC2Decode(Copy(t, i, StrToInt(len) * 3))
else if ct = 0 then
ud := GsmAlphabetDecode(Copy(t, i, StrToInt(len) * 3))
else
ud := Copy(t, i, StrToInt(len) * 2);
end;
WriteToLog('接收:' + oa + ',' + rd + ',' + ud);
Deal.ParseNote(oa,rd,ud);//oa是手机号,rd是接收的日期,ud代表接收到的内容
end;
菜鸟想问的就是这个ud,不能完全读取出来,请各位高人帮忙看看,本人在这里先谢过啦!