📄 punfun.pas
字号:
// 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 + -