125 lines
2.5 KiB
ObjectPascal
125 lines
2.5 KiB
ObjectPascal
unit U_HexFunction;
|
|
|
|
interface
|
|
uses
|
|
SysUtils,Windows,forms,Spcomm, shlobj,ExtCtrls;
|
|
function HexStrToStr(const S:string):string; // 十六进制转字符串
|
|
function StrToHexStr(const S:string):string;
|
|
function bintoint01(s: string): Double; //二进制转换十进制
|
|
function hextoint01(s: string): Integer; //十六进制转换十进制
|
|
Function intTobin01(Value :Integer): string; //十进制转换二进制
|
|
Function intTohex01(value :integer): string; //十进制转换十六进制
|
|
implementation
|
|
uses Math;
|
|
|
|
Function intTohex01(value :integer) : string;
|
|
begin
|
|
result:=uppercase(format('%x',[value]));
|
|
end;
|
|
//二进制字符转十进制
|
|
Function binToDec(Value :string) : string;//integer;
|
|
VAR
|
|
str : String;
|
|
Int : Integer;
|
|
i : integer;
|
|
BEGIN
|
|
Str := UpperCase(Value);
|
|
Int := 0;
|
|
FOR i := 1 TO Length(str) DO
|
|
Int := Int * 2+ ORD(str[i]) - 48;
|
|
Result := IntToStr(Int);
|
|
end;
|
|
|
|
//十进制转二进制 函数一
|
|
function mod_num(n1,n2:integer):integer;//取余数
|
|
begin
|
|
result:=n1-n1 div n2*n2
|
|
end;
|
|
//十进制转二进制 函数二
|
|
function reverse(s:String):String;//取反串
|
|
Var
|
|
i,num:Integer;
|
|
st:String;
|
|
begin
|
|
num:=Length(s);
|
|
st:='';
|
|
For i:=num DownTo 1 do
|
|
Begin
|
|
st:=st+s[i];
|
|
End;
|
|
Result:=st;
|
|
end;
|
|
|
|
//十进制转二进制
|
|
Function intTobin01(Value:Integer) : string;
|
|
Var
|
|
ST:String;
|
|
N:Integer;
|
|
Begin
|
|
ST:='';
|
|
n:=value;
|
|
While n>=2 Do
|
|
Begin
|
|
st:=st+IntToStr(mod_num(n,2));
|
|
n:=n div 2;
|
|
End;
|
|
st:=st+IntToStr(n);
|
|
Result:=reverse(st);
|
|
End;
|
|
function HexStrToStr(const S:string):string;
|
|
//16进制字符串转换成字符串
|
|
var
|
|
t:Integer;
|
|
ts:string;
|
|
M,Code:Integer;
|
|
begin
|
|
t:=1;
|
|
Result:='';
|
|
while t<=Length(S) do
|
|
begin //xlh 2006.10.21
|
|
while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
|
|
inc(t);
|
|
if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
|
|
ts:='$'+S[t]
|
|
else
|
|
ts:='$'+S[t]+S[t+1];
|
|
Val(ts,M,Code);
|
|
if Code=0 then
|
|
Result:=Result+Chr(M);
|
|
inc(t,2);
|
|
end;
|
|
end;
|
|
|
|
function StrToHexStr(const S:string):string;
|
|
//字符串转换成16进制字符串
|
|
var
|
|
I:Integer;
|
|
begin
|
|
for I:=1 to Length(S) do
|
|
begin
|
|
if I=1 then
|
|
Result:=IntToHex(Ord(S[1]),2)
|
|
else Result:=Result+IntToHex(Ord(S[I]),2);
|
|
end;
|
|
end;
|
|
|
|
|
|
//十六进制(S)-->>十进制(I)
|
|
function hextoint01(s: string): Integer;
|
|
begin //$代表16进制
|
|
Result:=StrToInt('$'+s);
|
|
end;
|
|
|
|
|
|
//二进制(S)-->>十进制(D) [重写:Jey]
|
|
function bintoint01(s: string): Double;
|
|
begin
|
|
while Length(s) <>0 do
|
|
begin //2^(长度-1)次方
|
|
if s[1]='1' then Result:=Result+power(2,Length(s)-1);
|
|
s:=Copy(s,2,Length(s));
|
|
end
|
|
end;
|
|
|
|
end.
|