⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 punfun.pas

📁 利用AT指令,直接控制GSM的控制.实现
💻 PAS
📖 第 1 页 / 共 2 页
字号:
//        False: 否
//作  者:卞伟  2002.12
//////////////////////////////////////////////////////////////////
function IfHex(S: string): Boolean;
var
  I: Integer;
begin
  Result:= True;
  for I:= 1 to Length(S) do
  begin
    Case S[I] of
      '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F': begin end;
    else begin
           Result:= False;
           Exit;
         end;
    end;
  end
end;

//////////////////////////////////////////////////////////////////
//目  的:此函数是用来求出字符串SubStr在字符串S从StartPos以后的位置
//函数名: Postion
//参  数:1、Substr  :需要查看的字符串
//        2、S       :源字符串
//        3、StartPos:开始位置
//返  回:integer      整数
//作  者:卞伟  2002.12
//////////////////////////////////////////////////////////////////
function Postion(Substr,S: string; StartPos: Integer): Integer;
begin
  Delete(S,1,StartPos - 1);
  Result:= Pos(SubStr,S);
end;

//////////////////////////////////////////////////////////////////
//目  的:求出一个宽字符的ASCII码值
//函数名: WideCharToASC
//参  数:1、SourceWideChar   宽字符
//返  回:integer      整数
//作  者:卞伟  2002.12
//////////////////////////////////////////////////////////////////
function WideCharToASC(SourceWideChar: WideChar): Integer;
begin
  Result:= Integer(SourceWideChar);
end;

//////////////////////////////////////////////////////////////////
//目  的:转换一个十六进制字符串为整数
//函数名: HexStrToInt
//参  数:1、SourceStr   十六进制字符串
//返  回:integer      整数
//作  者:卞伟  2002.12
//////////////////////////////////////////////////////////////////
function HexStrToInt(SourceStr : string):Integer;
var
  I: Integer;
begin
  Result:= 0;
  for I:= 1 to Length(SourceStr) do
  begin
    Result:= Result + HexCharToInt(SourceStr[I]) * (pow(16,Length(SourceStr) - I));
  end;
end;

//////////////////////////////////////////////////////////////////
//目  的:转换一个十六进制字符为整数
//函数名: HexCharToInt
//参  数:1、HexToken   十六进制字符
//返  回:integer      整数
//作  者:卞伟  2002.12
//////////////////////////////////////////////////////////////////
function HexCharToInt(HexToken : char):Integer;
begin
  {if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32);
  { use lowercase aswell }

  Result:=0;

  if (HexToken>#47) and (HexToken<#58) then       { chars 0....9 }
     Result:=Ord(HexToken)-48
  else if (HexToken>#64) and (HexToken<#71) then  { chars A....F }
     Result:=Ord(HexToken)-65 + 10;
end;

//////////////////////////////////////////////////////////////////
//目  的:把十六进制字符转换为二进制字符串
//函数名: HexCharToBin
//参  数:1、HexToken   十六进制字符
//返  回:字符串      二进制字符串
//作  者:卞伟  2002.12
//////////////////////////////////////////////////////////////////
function HexCharToBin(HexToken : char): string;
var
  DivLeft : integer;
begin
    DivLeft:=HexCharToInt(HexToken);   { first HEX->BIN }
    Result:='';
                                       { Use reverse dividing }
    repeat                             { Trick; divide by 2 }
      if odd(DivLeft) then             { result = odd ? then bit = 1 }
        Result:='1'+Result             { result = even ? then bit = 0 }
      else
        Result:='0'+Result;

      DivLeft:=DivLeft div 2;       { keep dividing till 0 left and length = 4 }
    until (DivLeft=0) and (length(Result)=4);      { 1 token = nibble = 4 bits }
end;

//////////////////////////////////////////////////////////////////
//目  的:把十六进制字符串转换为二进制字符串
//函数名: HexToBin
//参  数:1、HexNr   十六进制字符串
//返  回:字符串      二进制字符串
//作  者:卞伟  2002.12
//////////////////////////////////////////////////////////////////
function HexToBin(HexNr : string): string;
{ only stringsize is limit of binnr }
var
  Counter : integer;
begin
  Result:='';

  for Counter:=1 to length(HexNr) do
    Result:=Result+HexCharToBin(HexNr[Counter]);
end;

//////////////////////////////////////////////////////////////////
//目  的:指数函数
//函数名: pow
//参  数:
//        1、base : INTEGER
//        2、power:INTEGER
//返  回:INTEGER
//作  者:卞伟  2002.12
//////////////////////////////////////////////////////////////////
function pow(base, power: integer): integer;
var
  counter : integer;
begin
  Result:=1;

  for counter:=1 to power do
    Result:=Result*base;
end;

//////////////////////////////////////////////////////////////////
//目  的:把二进制字符串转换为整数
//函数名: BinStrToInt
//参  数:
//        1、BinStr : 二进制字符串
//返  回:INTEGER
//作  者:卞伟  2002.12
//////////////////////////////////////////////////////////////////
function BinStrToInt(BinStr : string) : integer;
var
  counter : integer;
begin
  if length(BinStr)>16 then
    raise ERangeError.Create(#13+BinStr+#13+
            'is not within the valid range of a 16 bit binary.'+#13);

  Result:=0;

  for counter:=1 to length(BinStr) do
      if BinStr[Counter]='1' then
        Result:=Result+pow(2,length(BinStr)-counter);
end;

//////////////////////////////////////////////////////////////////
//目  的:解码一个7-bit SMS(GSM 03.38)为ASCII码
//函数名: DecodeSMS7Bit
//参  数:
//        1、PDU : 7-bit编码字符串
//返  回:string
//作  者:卞伟  2002.12
//////////////////////////////////////////////////////////////////
function DecodeSMS7Bit(PDU : string):string;
var
  OctetStr : string;
  OctetBin : string;
  Charbin  : string;
  PrevOctet: string;
  Counter  : integer;
  Counter2 : integer;
begin
  PrevOctet:='';
  Result:='';

  for Counter:=1 to length(PDU) do
    begin
      if length(PrevOctet)>=7 then     { if 7 Bit overflow on previous }
        begin
          if BinStrToInt(PrevOctet)<>0 then
            Result:=Result+Chr(BinStrToInt(PrevOctet))
          else Result:=Result+' ';

          PrevOctet:='';
        end;

      if Odd(Counter) then            { only take two nibbles at a time }
        begin
          OctetStr:=Copy(PDU,Counter,2);
          OctetBin:=HexToBin(OctetStr);

          Charbin:='';
          for Counter2:=1 to length(PrevOctet) do
            Charbin:=Charbin+PrevOctet[Counter2];

          for Counter2:=1 to 7-length(PrevOctet) do
            Charbin:=OctetBin[8-Counter2+1]+Charbin;

          if BinStrToInt(Charbin)<>0 then Result:=Result+Chr(BinStrToInt(CharBin))
            else Result:=Result+' ';

          PrevOctet:=Copy(OctetBin,1,length(PrevOctet)+1);
        end;
    end;
end;

//////////////////////////////////////////////////////////////////
//目  的:返转一个字符串
//函数名: ReverseStr
//参  数:
//        1、SourceStr : 字符串
//返  回:string
//作  者:卞伟  2002.12
//////////////////////////////////////////////////////////////////
function ReverseStr(SourceStr : string) : string;
var
  Counter : integer;
begin
  Result:='';

  for Counter:=1 to length(SourceStr) do
    Result:=SourceStr[Counter]+Result;
end;

//////////////////////////////////////////////////////////////////
//目  的:把字符串中前后两个字符调换位置
//函数名: ChangePlaceS
//参  数:
//        1、SourceStr : 字符串
//返  回:string
//作  者:卞伟  2002.12
//////////////////////////////////////////////////////////////////
function ChangePlaceS(SourceStr: string) : string;
var
  I: Integer;
begin
  Result:= '';

  for I:= 1 to Length(SourceStr) div 2 do
    Result:= Result + SourceStr[I * 2] + SourceStr[I * 2 -1];

  if (Length(SourceStr) mod 2) > 0 then
    Result:= Result + SourceStr[Length(SourceStr)];
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -