关于SMS编码Delphi源码摘抄

    技术2022-05-11  69

    1.英文编码function Encode7bit(Src:String):String;var Dst:String;    i:Integer;    CurS,NextS:Byte;    TStr:String;begin  for i:=1 to Length(Src) do begin    //当前是字符按8位分组的第8位,无需编码(8个字符已缩短为7个)    if (i mod 8)=0 then Continue;        //取当前位为数字    TStr:=Copy(Src,i,1);    CurS:=Ord(TStr[1]);

        //当前右移位组中的第一个字符不移位     if (i mod 8)>1 then      CurS:=(CurS shr ((i mod 8)-1) );

        //取后一位为数字如果到了字符的结束,不取    if i<Length(Src) then begin      TStr:=Copy(Src,i+1,1);      NextS:=Ord(TStr[1]);    end else      NextS:=0;    //后一位移位 左移    NextS:=(NextS shl (8-(i mod 8)));

        //当前移位后加后一位移位后  转换成为十六进制    Dst:=Dst+IntToHex(CurS+NextS,2);  end;  Result:=Dst;end;

    2、英文解码function Decode7bit(Src:String):String;var Dst:String;    i:Integer;    CurS,ProiS:Byte;begin  for i:=1 to (Length(Src) div 2) do begin    //将当前位的十六进制转换为十进制    CurS:=StrToInt('$'+Copy(Src,(i-1)*2+1,2)); //32->50    //取前一位十六进制转换为十进制    if (i mod 7)<>1 then      ProiS:=StrToInt('$'+Copy(Src,(i-2)*2+1,2)) //C8->200    else      ProiS:=0;    //前一位右移,即将当前字符前移的位取出来    if (i mod 7)>0 then      ProiS:=(ProiS shr (9-(i mod 7)))    else      ProiS:=(ProiS shr 2);    //当前位左移除掉高位    if (i mod 7)>0 then      CurS:=(CurS shl (i mod 7) )    else      CurS:=(CurS shl 7 );    //将第八位设置为0    CurS:=(CurS shr 1);    Dst:=Dst+Chr(CurS+ProiS);    //第七个十六进制内已包含有一个完整的字符    if (i mod 7)=0 then begin      CurS:=StrToInt('$'+Copy(Src,(i-1)*2+1,2)); //32->50      CurS:=(CurS shr 1);      Dst:=Dst+Chr(CurS);    end;  end;//en for  Result:=Dst;end;

    3.中文编码function CnToUSC(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;   

    4、PDU解码function TForm1.DecodeChinese(SRC: String): string; //中文解码var  i:Integer;  S:String;  D:WideChar;  ResultW:WideString;begin  for i:=1 to Round(Length(Src)/4) do   begin    S:=Copy(Src,(i-1)*4+1,4);    D:=WideChar(StrToInt('$'+s)); //此处是重点,用delphi提供的widechar可以转换   ResultW:=ResultW+D;  end;  Result:=ResultW;end;


    最新回复(0)