下面是实现英文编码的部分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<len then //数据变换 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=1<cr>at+cgms=“13605696031”,129<cr> >hello world!<^z>